事件背景
生产环境发现有查询超时,通过异常日志获取查询sql并进行排查,explain后发现该sql使用了filesort,导致查询效率问题
Case 1
查询sql & 索引情况
- 查询sql
select * from table where column1 = 'xxx' and column2 in ('a','b','c') order by id asc limit 100 - 现有索引
主键索引
联合索引column1,column3
优化过程
经过explain发现,上述sql使用到了column1,column3的联合索引,但是查询中并不包含column3列,猜测可能是由于这个优化引擎使用了该索引才导致的filesort
于是删除column1,column3的联合索引,新建column1,column2,column3的单独索引,再次执行explain发现已经不存在filesort
Case 2
查询sql & 索引情况
- 查询sql
select * from table where user_id = 'xxx' and type in ('a','b','c') order by time desc limit 100 - 现有索引
主键索引
单独索引user_id
单独索引type
单独索引time
联合索引user_id,type,time
优化过程
经过explain发现,上述sql使用到了user_id,type,time的联合索引,但是Extra的结果为filesort,猜测可能是由于column2数据较少,索引命中率过低导致
于是删除了联合索引user_id,type,time,新建联合索引user_id,time,再次explain发现已经不存在filesort
后续尝试调整联合索引顺序,发现无论是user_id,type,time 或 user_id,time,type ,上述查询都会使用这个联合索引,但是都存在filesort,目前没有排查出优化引擎为何会出现filesort,如果有大佬知道也欢迎留言指教
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。