记录一下。
援引自 https://segmentfault.com/q/1010000009440247
背景:
在项目中一个很大的库进行条件过滤分页查询时,发现查询时间非常久。排查sql执行计划,发现根本没使用索引。
原因及解决办法:
在SELECT
中查询了索引建以外的列,那么ORDER BY
就不会使用索引了。你可以用FORCE INDEX
来强制使用索引。
还有一点,就是所谓的覆盖索引。覆盖索引的定义是:MySQL可以根据索引返回select
字段而不用根据索引再次查询文件而得出结果。
当你使用select *
时,你没有强制指定索引,那么mysql
为了得到你的查询的字段而查询文件,然后再进行排序操作,这就没有用到覆盖索引。而你使用了force index
就会强制使用覆盖索引,这样就不会出现filesort
的情况了。