天天看点

Mysql优化学习14-有更合适的索引不走,怎么办

Mysql优化学习14-有更合适的索引不走,怎么办

##举例子

在sakila数据库中有一个city表,里面存储了各种各样的城市

Mysql优化学习14-有更合适的索引不走,怎么办

我们只要city这一列,然后把这个数据五倍的存到新表(仅有city一列)中

Mysql优化学习14-有更合适的索引不走,怎么办

然后再打乱city这一列的数据,随机分布:

Mysql优化学习14-有更合适的索引不走,怎么办

然后呢再分别以city这个字段的前缀各种分别创建8个索引。

Mysql优化学习14-有更合适的索引不走,怎么办

#####然后我们分析下这个表的索引

Mysql优化学习14-有更合适的索引不走,怎么办

就可以看到各个索引mysql自己估算出来的基数。

我们可以看到出以第一个字母作为索引区分度有26种,前两个字母的区分度为188更加细了,以此类推。

而我们知道每一个辅助索引他就是一个B+树,所以我们使用前三个或者前四个作为辅助索引的效果就已经很好了,再到后面就必要性不大了,因为B+树也是占用空间的,区分度越大虽然粒度更清晰了,但是占用空间也大了。

Mysql优化学习14-有更合适的索引不走,怎么办

而有时候我们看到查询语句走了一个索引没有走另一个索引,其中一个原因可能就是因为区分度的关系,mysql会优先使用区分度大的索引,这样查询效率更高效。

但是有个问题就是这个区分度是mysql自己估算出来的,所以不是很精准,所以如果我们明显的知道这个区分度不对,我们就可以强制的使用某一个索引。

Mysql优化学习14-有更合适的索引不走,怎么办

##优化索引