mysql 查询orderby 主键为什么出现Using filesort

新手上路,请多包涵

WX20200419-100804@2x.png
这个是数据库的表

WX20200419-100814@2x.png
这样的索引情况下,出现了Using filesort
33.png

如何实现
SELECT * FROM jsy_card WHERE cha_times > 0 ORDER BY id DESC LIMIT 0,30
这个语句的查询,用到两个字段cha_times,id,并且没有出现Using filesort 呢

如果没有lh这个联合索引,他key直接走 PRIMARY

阅读 4.6k
2 个回答

为什么order by主键出现filesort?
1.因为你并没有走主键;
2.因为你的联合索引,并不能使id避免排序

SELECT * FROMjsy_cardWHEREcha_times> 0 ORDER BYidDESC LIMIT 0,30如何建立联合索引避免filefort?
无法解决,由于cha_times是范围查询,也就无法保证cha_times在有序的情况下,id也是有序的

id 是主键了,就不要拿它去建立联合索引。
按照你的需求,将 cha_times 建立普通索引即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题