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”。如何改进查询?
答案 0 :(得分:5)
当您混合ASC
和DESC
排序时,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;
如果您订购的两列不属于同一个键,那么您正在执行上述两项操作。