如何避免这个mysql查询的filesort

时间:2011-07-12 03:08:17

标签: mysql sql sql-order-by filesort

我需要一些帮助来避免此查询的文件输出。

  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)是(typecategorydidid)的覆盖索引

由于ORDER BY id DESC,执行filesort。有没有办法避免文件输入这种查询?

2 个答案:

答案 0 :(得分:4)

更改索引列顺序。该索引对于排序是无用的,因为它是第4列,并且不能按原样使用。

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

MySQL docs中,你打破了#34;你在一个键的非连续部分使用ORDER BY&#34;和&#34;用于获取行的键与ORDER BY&#34中使用的键不同;

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

,它们是互斥的

另一个建议:

  • id
  • 上的单个列索引
  • 也回到原始索引
  • 删除索引提示
  • 希望优化器能够使用两个索引(&#34;索引交集&#34;)

答案 1 :(得分:0)

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

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