Ich habe diese Arbeit SQL-Abfrage, aber es macht mich fast DB Absturz:Eine korrekte MySQL Left Join-Abfrage überfordert eine smallsized DB obwohl Zeilen indiziert sind
SELECT MASTER.master_id,
MASTER.master_summary,
MASTER.master_start,
MASTER.master_end,
MASTER.master_risk,
MASTER.master_source,
MASTER.master_veto,
master.master_tags,
NULL AS HAS_CE,
C2C.c2c_customer
FROM `cer_master` MASTER
LEFT JOIN `cer_c2customer` C2C
ON (C2C.c2c_id = MASTER.master_id AND C2C.c2c_source = MASTER.master_source)
WHERE (MASTER.master_id NOT LIKE 'TAV%')
AND ((MASTER.master_class <> 'type2') OR (MASTER.master_class <> 'type3'))
AND (MASTER.master_status <> 'Cancelled')
AND (MASTER.master_end >= Now() AND MASTER.master_start >= Date_sub(Now(), INTERVAL 1 day))
Wenn ich versuche, dies auf phpMyAdmin zu laufen habe ich buchstäblich zu warten auf 5min und dieses Ergebnis: 3699 insgesamt, Query 0,9358 sec nahm
I MASTER.master_id, MASTER.master_start, MASTER.master_end, MASTER.master_source
aswell als c2c.c2c_id, C2C.c2c_source and C2C.c2c_customer
indiziert haben, aber es scheint nicht zu helfen.
Zusätzliche Informationen: cer_master MASTER
Tabelle hat 277.502 Zeilen und cer_c2customer C2C
Tabelle hat 72.788 Zeilen.
Kann mir jemand helfen, diese Abfrage zu optimieren? Ich brauche es dringend und kann mir keinen anderen Weg vorstellen.
EDIT: Die Ergebnisse der EXPLAIN Abfrage:
+----+-------------+--------+-------+-------------------------------------------------------+---------------------------------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+-------+-------------------------------------------------------+---------------------------------+---------+------+-------+-------------+
| 1 | SIMPLE | MASTER | range | CHM_MASTER_SCHEDULED_START_DATE,CHM_MASTER_SCHEDUL... | CHM_MASTER_SCHEDULED_START_DATE | 4 | NULL | 5042 | Using where |
+----+-------------+--------+-------+-------------------------------------------------------+---------------------------------+---------+------+-------+-------------+
| 1 | SIMPLE | C2C | ALL | CER_C2C_CHANGE_ID | NULL | NULL | NULL | 72788 | |
+----+-------------+--------+-------+-------------------------------------------------------+---------------------------------+---------+------+-------+-------------+
Table Create Table
master CREATE TABLE `master` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
` MASTER_LAST_MODIFIED_DATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
` MASTER_SOURCE` varchar(16) NOT NULL,
` MASTER_ID` varchar(16) NOT NULL,
` MASTER_SUMMARY` text NOT NULL,
` MASTER_NOTES` text NOT NULL,
` MASTER_SERVICE` varchar(255) NOT NULL,
` MASTER_SITE` text NOT NULL,
` MASTER_START` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
` MASTER_END` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
` MASTER_DEPARTMENT_FLAG` varchar(8) NOT NULL,
` MASTER_RISK` int(8) NOT NULL DEFAULT '1',
` MASTER_IMPACT_LEVEL` varchar(64) NOT NULL,
` MASTER_TOOL_STATUS` varchar(32) NOT NULL,
` MASTER_IMPACT_RISK_NOTES` text NOT NULL,
` MASTER_CALENDAR_WEEK` varchar(16) NOT NULL,
` MASTER_TAGS` varchar(1024) NOT NULL,
` MASTER_VETO` tinyint(1) NOT NULL DEFAULT '0',
` MASTER_LAYER_TAGS` text NOT NULL,
` MASTER_ORAKEL_ID` int(11) NOT NULL DEFAULT '0',
` MASTER_USED_TEMPLATE` text NOT NULL,
PRIMARY KEY (`ID`),
KEY ` MASTER_ID` (` MASTER_CHANGE_ID`),
KEY ` MASTER_LAST_MODIFIED_DATE` (` MASTER_LAST_MODIFIED_DATE`),
KEY ` MASTER_SERVICE` (` MASTER_SERVICE`),
KEY ` MASTER_START` (` MASTER_START`),
KEY ` MASTER_END` (` MASTER_END_`),
KEY ` MASTER_SOURCE` (` MASTER_SOURCE`)
) ENGINE=MyISAM AUTO_INCREMENT=278315 DEFAULT CHARSET=utf8
und das ist Show-Tabelle aus c2c_customer erstellen: cerberus_change2customer
CREATE TABLE `c2c_customer` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`C2C_SOURCE` text NOT NULL,
`C2C_ID` text NOT NULL,
`C2C_CUSTOMER` text NOT NULL,
`C2C_LAST_MODFIED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`),
FULLTEXT KEY `C2C_ID` (`C2C_ID`),
FULLTEXT KEY `C2C_CUSTOMER` (`C2C_CUSTOMER`)
) ENGINE=MyISAM AUTO_INCREMENT=516044 DEFAULT CHARSET=utf8
Welche Indizes haben Sie verwendet? Was ist Ihr Clustered-Index? – Ben
Sie müssen Ihre erklären – e4c5
@Ben Ich fürchte, ich bin kein Experte für die Indizierung, alles, was ich tat ging in 'Struktur'-Ansicht der db und klicken Sie dann auf 'add index'on der Spalte aus der' Mehr-Menü. Kann ich das anders/effizienter machen? – sardine