2017-05-03 2 views
1

Ich habe die folgenden zwei Tabellen:Mysql - Leistungsprobleme

CREATE TEMPORARY TABLE T1 (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `Date` datetime NOT NULL, 
    PRIMARY KEY (`ID`) 
)ENGINE=MyISAM DEFAULT CHARSET=utf8; 


CREATE TABLE T2 (
    `ID` bigint(20) NOT NULL AUTO_INCREMENT, 
    `RecordID` int(11) NOT NULL, 
    PRIMARY KEY (`ID`), 
    KEY `ID` (`ID`), 
    KEY `RecordID` (`RecordID`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

wo T1 ~ 100.000 Datensätze und T2 hat ~ 6.000.000 Datensätze

Die folgende Abfrage dauert ~ 1,5 Sekunden:

SELECT * FROM T1 INNER JOIN T2 ON T1.ID = T2.RecordID 

Wenn ich die folgende where-Klausel hinzufüge, dauert es ~ 20 Sekunden:

WHERE T1.Date <= '2017-02-18' 

Wissen, dass die Abfrage mit der Wo Ursache keine Datensätze zurückgibt.

Ich brauche deine Hilfe bitte.

+2

Sie können einen Index für die Spalte "Datum" hinzufügen. – user5226582

Antwort

1

Sie müssen vorsichtig sein, wenn Sie die Geschwindigkeit einer Abfrage messen. Wenn Sie nur nach der Rückkehr der ersten Zeile suchen, erhalten Sie möglicherweise einen irreführenden Indikator.

Für diese Abfrage:

SELECT * 
FROM T1 INNER JOIN 
    T2 
    ON T1.ID = T2.RecordID 
WHERE T1.Date <= '2017-02-18'; 

Sie möchten einen zusammengesetzten Index für T1(Date, ID). Sie möchten auch einen Index für T2(RecordId), aber Sie haben diesen Index bereits.

+0

Vielen Dank, es funktioniert für mich. –