##举例子

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

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

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

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

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

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

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

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

而有时候我们看到查询语句走了一个索引没有走另一个索引,其中一个原因可能就是因为区分度的关系,mysql会优先使用区分度大的索引,这样查询效率更高效。 但是有个问题就是这个区分度是mysql自己估算出来的,所以不是很精准,所以如果我们明显的知道这个区分度不对,我们就可以强制的使用某一个索引。

##优化索引

##总结