MySQL InnoDB 索引
B+树索引
B+树索引在DB中有一个特点就是高扇出性,一般在DB中B+树的高度在2-3层左右,也就意味着只需要2-3次的IO操作即可。而现在的磁盘每秒差不多在100次IO左右,2-3次意味着查询时间只需0.02-0.03秒。
聚集索引
InnoDB存储引擎表是索引组织表,即表中数据安装主键顺序存放。而聚集索引就是按照每张表的主键构造一颗B+,并且叶节点存放着整张表的行记录数据,因此也让聚集索引也是索引的一部分。
实际的数据页只能按照一颗B+树进行排序,因此每张表只能拥有一个聚集索引。在很多情况下,查询优化器非常倾向于采用聚集索引,因为聚集索引能够让我们在索引的叶节点上直接找到数据。
辅助索引
对于辅助索引(也称非聚集索引),叶节点不包含行的全部数据。叶节点除了包含键值以外,每个叶节点中的索引行中还包含了一个书签,该书签用来告诉InnoDB存储引擎,哪里可以找到与索引相对应的行数据。因为InnoDB存储引擎是索引组织表,因此InnoDB存储引擎的辅助索引的书签就是相应行数据的聚集索引键。
什么时候使用B+树索引
一般的经验是对于访问表中很少一部分行时,使用B+树索引才有意义。而对于像性别,地区,类型等字段,它们可取值的范围很小(低选择性),一般不推荐使用B+树索引;反之,如果某个字段的取值范围很广,几乎没有重复(高选择性),则此时使用B+树索引是最合适的,例如email字段,在一些应用中通常都不允许重复出现。
因此,当访问高选择性字段并从表中取出很少一部分行时,对这个字段添加B+树索引是非常有必要的。但是如果出现了访问字段是高选择性,但是取出的行数据占表中大部分的数据时,这时MySQL数据库就不会使用B+树索引了。
文章参考: