2017-05-03 66 views
1

我有以下2個表:MySQL的 - 性能問題

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; 

其中T1具有〜10萬條記錄 和T2具有〜600萬點的記錄

下面的查詢需要〜1.5秒:

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

當我添加以下where子句時,需要約20秒:

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

已知具有where原因的查詢返回沒有記錄。

我需要你的幫助。

+2

考慮在「日期」列中添加索引。 – user5226582

回答

1

當你測量查詢的速度時,你必須小心。如果你只查找第一行的返回,那麼你可能會得到一個誤導性的指標。

對於此查詢:

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

你想在T1(Date, ID)一個綜合指數。您還需要T2(RecordId)上的索引,但您已擁有該索引。

+0

謝謝你對我有用。 –