MySQL不使用索引;使用filesort

时间:2011-06-30 23:57:50

标签: mysql sql indexing filesort

MySQL似乎没有使用索引,并在以下查询中使用filesort:

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

我在contest_id,tweet_id和tweeted_at

上有索引

当我执行EXPLAIN EXTENDED时,Extra返回“Using where; using filesort”。如何改进查询?

1 个答案:

答案 0 :(得分:5)

当您混合ASCDESC排序时,MySQL无法使用索引来优化GROUP BY语句。

此外,使用多个键进行排序将导致无法使用索引优化查询。

来自文档:

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

  

在某些情况下,MySQL无法使用   用于解析ORDER BY的索引,   虽然它仍然使用索引来查找   与WHERE子句匹配的行。   这些案例包括以下内容:

     

您在不同的密钥上使用ORDER BY:

     

SELECT * FROM t1 ORDER BY key1,key2;

     

...

     

你混合ASC和   DESC:

     

SELECT * FROM t1 ORDER BY key_part1   DESC,key_part2 ASC;

如果您订购的两列不属于同一个键,那么您正在执行上述两项操作。