2017-05-03 15 views
1

私は、次の2つのテーブルがあります。MySQLの - パフォーマンスの問題

T1は〜10万記録 を持っており、T2は、次のクエリは〜1.5秒かかり〜6,000,000、レコード

を持って

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; 

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

ありがとう、それは私のために働く。 –

関連する問題