想请教一个 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上面语句:从下图中可看到使用到了组合索引,并且排序也用到了索引。
想请教一个Using filesort 的优化问题

之后业务修改,我们要在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 的优化问题

问:Using filesort 该如何优化掉,想请教一下优化的思路。感谢!

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

增加 post_id, created_at 索引

Laravel

state = 1的时候 还是会走三个字段的索引

Laravel

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!