想请教一个 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 该如何优化掉,想请教一下优化的思路。感谢!

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 2

增加 post_id, created_at 索引

Laravel

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

Laravel

4年前 评论

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