该表的记录如下:
添加两个索引:
通过 explain 来查看:
会命中两条索引,但实际只用了 idx_v1,即使实际查询用联合索引更好,也依然只用了 idx_v1。
之前的测试,发现用的是第一个,我们删除索引,把之前的索引语句顺序换一下:
发现用的是第一个。
原始sql
他的执行计划
可见,这个sql执行过程是被命中索引了的,索引如下
这个索引创建的稍微有点问题,在查询筛选中,如果用到了范围查询,在创建联合索引的时候,应该尽量把需要范围查询的字段放在最后
在上面创建的索引中,首先命中 f_start_time 字段索引,由于他是当前联合索引的第一个字段,那么他就不会在去走索引的第二个字段了;
他的执行过程是先通过索引查询出符合时间范围的数据,由引擎返回给服务器,然后服务器再执行where条件筛选,故在extra中出现了 using where
为了解决这个问题,创建这个索引的过程应该是本着让索引命中更多列的原则,把startTime字段放在联合索引的最后,优化后的索引如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)