想请教一个 Using filesort 的优化问题
最近业务遇到一个查询排序的Using filesort 优化问题,我简单重现一下场景,与业务无关,只是举相似的例子。
场景重现
表名 :bbs_replay
表组合索引:key top-replay
(post_id,state,created_at)
原业务SQL:
select * from bbs_replay where `post_id` = '8698' and `state` = 1 order by `created_at` desc limit 10 offset 0
explain上面语句:从下图中可看到使用到了组合索引,并且排序也用到了索引。
之后业务修改,我们要在state 状态新增一个状态的查询。
现业务SQL:
select * from bbs_replay where `post_id` = '8698' and `state` in(1,2,3) order by `created_at` desc limit 10 offset 0
explain上面语句:从下图中可看到使用到了组合索引,但是排序并未使用到索引,并且出现了 Using filesort
问:Using filesort 该如何优化掉,想请教一下优化的思路。感谢!
增加
post_id, created_at
索引state = 1
的时候 还是会走三个字段的索引用union