作者:小小木的博客 来源:https://www.cnblogs.com/wyc1994666/p/10831039.html
哈喽,各位新来的小伙伴们,大家好!由于公众号做了改版,为了保证公众号的资源能准时推送到你手里,大家记得将咱们的公众号 加星标置顶 ,在此真诚的表示感谢~
正文如下:
开门见山,直接上图,下面的思维导图即是现在要讲的内容,可以先有个印象~
常见索引类型(实现层面)
索引种类(应用层面)
聚簇索引与非聚簇索引
覆盖索引
最佳索引使用策略
1.常见索引类型(实现层面)
首先不谈Mysql怎么实现索引的,先马后炮一下,如果让我们来设计数据库的索引,该怎么设计?
我们首先思考一下索引到底想达到什么效果?其实就是想能够实现快速查找数据的策略,所以索引的实现本质上就是一个查找算法。
但是跟普通的查找有所不同,因为我们的数据有一下特征:
1.存储的数据是非常非常多的
2.并且还不断的动态变化
所以实现索引时需要考虑到这两个特点。我们需要找一个最合适的数据结构算法来实现查找功能。
下面一起看下常见的查找策略,如下图:
由于前面说的两个特点我们首先排除静态查找的算法。
至于查找树,我们有二叉树和多叉树两种选择:
二叉树:如果先泽二叉树的话,由于我们的数据量庞大,二叉树的深度会变得非常大,我们的索引树会变成参天大树,每次查询会导致很多磁盘IO。
多叉树:多叉树解决了了树的深度大的问题,那么我们到底选择B树还是B+树呢?
B树 摘自维基百科 https://zh.wikipedia.org/wiki/B%2B树
B+树 摘自维基百科 https://zh.wikipedia.org/wiki/B%2B树
从上面图可知B+树的叶子节点存放了所有的索引值,并且