繁体   English   中英

如何避免此 mysql 查询的文件排序

[英]How to avoid filesort for this mysql query

我需要一些帮助来避免对这个查询进行文件排序。

  SELECT id 
    FROM articles USE INDEX(group)
   WHERE type = '4' 
     AND category = '161' 
     AND did < '10016' 
     AND id < '9869788' 
ORDER BY id DESC 
   LIMIT 10

INDEX(group) 是 ( type , category , did , id ) 的覆盖索引

由于ORDER BY id DESC ,执行文件排序。 有没有办法避免对此类查询进行文件排序?

更改索引列顺序。 该索引对排序没有用处,因为它是第 4 列并且还没有准备好按原样使用。

当然,这会影响索引对这个 WHERE 的有用性,因为在相等列之前需要一个不等列

MySQL 文档中,您打破了“您在键的非连续部分上使用 ORDER BY”和“用于获取行的键与 ORDER BY 中使用的键不同”

编辑:根据我上面的链接,您不能拥有同时满足 WHERE 和 ORDER BY 的索引。 由于我在上面发布的两个条件,它们是互斥的

另一个建议:

  • id 上的单列索引
  • go 也回到原来的索引
  • 删除索引提示
  • 希望优化器解决两个索引都可以使用(“索引交集”)

在 id 上创建索引并键入它应该适合您。 如果 Id 是唯一的,您还可以为其创建主键。

您的查询正在使用文件排序,因为优化器可能正在使用您在查询中创建的索引的第一列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM