mysql 为什么总是推荐使用联合索引而不是单值索引

2020-05-10  本文已影响0人  尹楷楷

有一句话是有谬误的: 在where条件中使用到的字段都加上索引。这个结论似乎成为了好多人的习惯性结论。

事实上我们只需要添加一个联合索引包括这些字段,而不是为每个字段分别添加索引! 这不仅仅是对空间的浪费,而且真正起作用的只是其中一个!

可以做出实验在验证下:

tb_box 表有100万条数据

SELECT count(*) FROM tb_box -- 1045408

查询语句如下:

EXPLAIN SELECT * FROM tb_box   WHERE sb_number like 'g%' AND create_time >= '2020-04-20 20:33:08' 

1、先为tb_box的sb_number、create_time字段分别建立a、b索引


image.png

执行计划如下,key的值为a 表示只是使用到a索引,b索引未使用!而且extra中出现了using where,表明有字段参与where而不是索引直接参与where


image.png

执行时间 0.442秒

2、重新建立索引,为tb_box添加一个联合索引包含sb_number、create_time字段


image.png

查看执行计划,a索引被直接使用。索引长度是137比单独创建的131大,说明有更多索引生效。rows=76969比80910小,表明扫描更少的行就能找到结果了


image.png

执行时间 0.181秒,快了接近4倍

上一篇下一篇

猜你喜欢

热点阅读