MySQL 不使用索引;使用文件排序
MySQL 似乎没有使用索引,而是在以下查询中使用 filesort:
SELECT `tweets`.*
FROM `tweets`
WHERE (`tweets`.contest_id = 159)
ORDER BY tweet_id ASC, tweeted_at DESC LIMIT 100 OFFSET 0
我在 racing_id、tweet_id 和 tweeted_at 上有索引
当我执行 EXPLAIN EXTENDED
时,Extra 返回“Using where; using filesort”。如何改进我的查询?
MySQL appears to be not using indexes and is using filesort on the following query:
SELECT `tweets`.*
FROM `tweets`
WHERE (`tweets`.contest_id = 159)
ORDER BY tweet_id ASC, tweeted_at DESC LIMIT 100 OFFSET 0
I have indexes on contest_id, tweet_id and tweeted_at
When I execute EXPLAIN EXTENDED
, Extra returns "Using where; using filesort". How can I improve my query?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当混合使用ASC和DESC排序时,MySQL无法使用索引来优化GROUP BY语句。
另外,使用多个键进行排序将导致无法使用索引优化查询。
来自文档:
http://dev.mysql.com/doc/refman/ 5.6/en/order-by-optimization.html
如果您要排序的两列不是同一键的一部分,那么您正在执行上述两件事。
When you mix
ASC
andDESC
sorting, MySQL cannot use indexes to optimize theGROUP BY
statement.Also, using multiple keys to sort will result in it not being able to optimize the query with indexes.
From the docs:
http://dev.mysql.com/doc/refman/5.6/en/order-by-optimization.html
If the two columns you are ordering on are not part of the same key, then you are doing both of the above things.