什么是MySQL的执行计划(Explain关键字)?( 五 )


什么是MySQL的执行计划(Explain关键字)?文章插图
从上面两个实例可以发现 , 同样使用最左的索引列范围查询 , 有些情况未用到索引 , 做了全表扫描(第一个例子);有些情况使用到了索引(第二个例子) 。
经反复验证 , 发现如下规律(不一定可靠) , 也可能与数据的第一行或最小值相关 。
1. 跟存储的数据有关
2. 在大于条件下 , 如果条件数据小于列数据 , 则索引无效;如果条件数据大于列数据 , 则索引有效;
在设计查询条件时 , 请注意规避 。
针对第一个例子 , 可以采用覆盖索引的方式优化 。
实例四:explain select * from t_demo where c1='d1'and c2='d2' order by c3;
什么是MySQL的执行计划(Explain关键字)?文章插图
explain select * from t_demo where c1='d1'order by c3;
什么是MySQL的执行计划(Explain关键字)?文章插图
explain select * from t_demo where c1='d1'and c3='d3' order by c2;
什么是MySQL的执行计划(Explain关键字)?文章插图
order by排序使用到索引和没使用到索引的情况
实例五:explain select * from t_demo where c1='d1'and c4='d4' order by c1,c2;
什么是MySQL的执行计划(Explain关键字)?文章插图
条件列包含没有索引的列 , 出现了Using filesort
实例六:【什么是MySQL的执行计划(Explain关键字)?】explain select * from t_demo where c1='d1'and c4='d4' group by c1,c2;
什么是MySQL的执行计划(Explain关键字)?文章插图
性能非常差的场景 , 同时出现了Using temporary和Using filesort
总结1. 两种方式的排序filesort和index , Usingindex是指MySQL扫描索引本身完成排序 。 index效率高 , filesort效率低 。
2. order by满足两种情况会使用Using index 。
1)order by语句使用索引最左前列 。
2)使用where子句与order by子句条件列组合满足索引最左前列 。
3. 尽量在索引列上完成排序 , 遵循索引建立(索引创建的顺序)时的最佳左前缀法则 。
4. group by与order by很类似 , 都是先排序后分组 , 遵照索引创建顺序的最佳左前缀法则 。