三个维度
- 为什么需要索引
- 索引是如何提升效率的
- 为什么采用B+树
为什么需要索引
如果没有索引,当我们要去查询数据的时候,需要从磁盘里面去随机查找。而机械磁盘随机读取数据需要频繁的寻找磁道以及从磁盘读取数据。这个过程非常耗时。
索引是如何提升效率的
有了索引以后,相对于把索引列以及所属的磁盘块地址缓存到了内存里面。
在数据查询的时候,直接可以找到目标数据列所属的磁盘地址。去读取对应的磁盘块的数据就好了,相当于减少了磁盘IO的一个次数。
为什么要采用B+树
性能的角度
磁盘IO次数越少越好。那用什么样的数据结构来存储索引列能够去达到这样的一个目的?
很显然,多路平衡查找树就是一个非常好的选择。也就是B+树或者B树。
问题回答
只要命中了索引列的一个查询,它都能够去提升查询效率。但是即便是命中了索引,查询效率也不一定会增加。比如说像性别字段去加索引,那么因为数据的散列度不高,导致可能会遍历整颗B+树。
所以我认为加索引能够提升查询效率的根本原因是InnoDB采用B+树来存储索引。那么使得在千万级数据量的一个情况下,树的高度可以控制在3层以内,而层高代表磁盘IO的一个次数。
因此基于索引查找,它可以减少磁盘IO的一个次数。
参考资料:为什么加索引能提升查询效率