MySQL未使用索引;使用文件排序

6

MySQL似乎在以下查询中未使用索引并正在使用文件排序:

  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”。我该如何改进我的查询?


你是否有一个覆盖contest_id,tweet_id,tweeted_at的单一索引?还是它们是多个单列索引? - The Scrum Meister
1个回答

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;
如果您正在排序的两列不属于同一个键,则会同时执行上述两个操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接