【问题标题】:MySQL not using indexes; using filesortMySQL 不使用索引;使用文件排序
【发布时间】:2011-06-30 23:57:50
【问题描述】:

MySQL 似乎没有使用索引,而是在以下查询中使用文件排序:

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

我有关于比赛 ID、推文 ID 和推文的索引

当我执行EXPLAIN EXTENDED 时,Extra 返回“使用 where;使用文件排序”。如何改进我的查询?

【问题讨论】:

  • 您是否有一个涵盖contest_id, tweet_id, tweeted_at 的索引?还是它们是多个单列索引?

标签: mysql sql indexing filesort


【解决方案1】:

当你混合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;

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

【讨论】:

    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2012-11-11
    • 2011-09-01
    相关资源
    最近更新 更多