Mysql —— 索引的使用顺序

Mysql —— 索引的使用顺序,第1张

创建表

该表的记录如下:

添加两个索引

通过 explain 来查看:

会命中两条索引,但实际只用了 idx_v1,即使实际查询用联合索引更好,也依然只用了 idx_v1。

之前的测试,发现用的是第一个,我们删除索引,把之前的索引语句顺序换一下:

发现用的是第一个。

原始sql

他的执行计划

可见,这个sql执行过程是被命中索引了的,索引如下

这个索引创建的稍微有点问题,在查询筛选中,如果用到了范围查询,在创建联合索引的时候,应该尽量把需要范围查询的字段放在最后

在上面创建的索引中,首先命中 f_start_time 字段索引,由于他是当前联合索引的第一个字段,那么他就不会在去走索引的第二个字段了;

他的执行过程是先通过索引查询出符合时间范围的数据,由引擎返回给服务器,然后服务器再执行where条件筛选,故在extra中出现了 using where

为了解决这个问题,创建这个索引的过程应该是本着让索引命中更多列的原则,把startTime字段放在联合索引的最后,优化后的索引如下:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6118836.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存