2011-06-30 14 views
6
MySQLはインデックスを使用していないように見える

を使用して、次のクエリにfilesortレコードを使用している:MySQLはインデックスを使用していません。 filesortレコード

SELECT `tweets`.* 
    FROM `tweets` 
    WHERE (`tweets`.contest_id = 159) 
ORDER BY tweet_id ASC, tweeted_at DESC LIMIT 100 OFFSET 0 

私は私が使用してEXPLAIN EXTENDED、余分なリターンを「実行contest_id、tweet_id上と

tweeted_atインデックスを持っています; filesortを使用しています。どのようにクエリを改善できますか?

+0

'contest_id、tweet_id、tweeted_at'をカバーする単一のインデックスがありますか?または複数の単一列の索引ですか? –

答えて

5

ASCDESCをソートすると、MySQLはインデックスを使用してGROUP BYステートメントを最適化することができません。

また、複数のキーを使用すると、インデックスを使用してクエリを最適化できなくなります。ドキュメントから

:それはまだWHERE句に一致する 行を見つけるためにインデックスを使用していますが、いくつかのケースでは

http://dev.mysql.com/doc/refman/5.6/en/order-by-optimization.html

、MySQLはORDER BY、 を解決するために インデックスを使用することはできません。 これらの例は次のとおりです。

あなたは別のキーにORDER BYを使用します。KEY1、KEY2 BY t1の順と

SELECT *;

あなたが混在

... ASCとDESC :key_part1 DESC、key_part2 ASC BYのT1 ORDER FROM

SELECT *;

注文している2つの列が同じキーに含まれていない場合は、上記の両方を行っています。

関連する問題