什么是MySQL的执行计划(Explain关键字)?( 五 )
文章插图
从上面两个实例可以发现 , 同样使用最左的索引列范围查询 , 有些情况未用到索引 , 做了全表扫描(第一个例子);有些情况使用到了索引(第二个例子) 。
经反复验证 , 发现如下规律(不一定可靠) , 也可能与数据的第一行或最小值相关 。
1. 跟存储的数据有关
2. 在大于条件下 , 如果条件数据小于列数据 , 则索引无效;如果条件数据大于列数据 , 则索引有效;
在设计查询条件时 , 请注意规避 。
针对第一个例子 , 可以采用覆盖索引的方式优化 。
实例四:explain select * from t_demo where c1='d1'and c2='d2' order by c3;
文章插图
explain select * from t_demo where c1='d1'order by c3;
文章插图
explain select * from t_demo where c1='d1'and c3='d3' order by c2;
文章插图
order by排序使用到索引和没使用到索引的情况
实例五:explain select * from t_demo where c1='d1'and c4='d4' order by c1,c2;
文章插图
条件列包含没有索引的列 , 出现了Using filesort
实例六:【什么是MySQL的执行计划(Explain关键字)?】explain select * from t_demo where c1='d1'and c4='d4' group by c1,c2;
文章插图
性能非常差的场景 , 同时出现了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很类似 , 都是先排序后分组 , 遵照索引创建顺序的最佳左前缀法则 。
- vivo追求的本原设计是什么?X60 Pro给出了答案
- iQOO 7邀请函曝光“马”“鸭”“羊”代表什么
- 近期浙江引来这么多重磅级“帮手”传递什么信号?
- 都是为自己手机代言,为什么董明珠不行,雷军太行了?
- 有没有必要给老年人买台智能手机?
- 玩转光追大作最低需要什么配置?快来看小狮子的推荐
- realme国潮锦鲤手机为什么叫V15?徐起解释命名规则
- 九千元买的手机,最基本的功能都不好用,男子:还能干什么?
- 为什么苹果用户哪怕买二手机,都不用安卓?三点原因太真实
- 「小狮子诊所」游戏耳机和音乐耳机究竟有什么区别?