MySQL不使用索引; 使用filesort

JZ.*_*JZ. 6 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
Run Code Online (Sandbox Code Playgroud)

我有关于contest_id,tweet_id和tweeted_at的索引

当我执行时EXPLAIN EXTENDED,Extra返回"使用where;使用filesort".如何改进查询?

Chr*_*nte 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;

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