InnoDB存储引擎有三种常见索引
1.B+树
2.全文索引
3.哈希索引
哈希索引是自适应的,会根据表的情况制动生成表成为哈希索引,无法人为干预
B+是最常见的
B+树是为磁盘或其他存储辅助设备设计的一种平衡查找树
索引中的B+树分为聚集索引和辅助索引
聚集索引:按照每张表的主键构造B+树,叶子节点存放整张表的行记录数据(数据页),每张表只有一个聚集索引
数据页存放的是行数据,索引页存放的是键值以及偏移量
辅助索引:叶子索引不包含行数据,而是包含书签,指向对应的聚集索引,一个表可以有多个辅助索引
B+树索引插入
1.随机插入,取页中间的记录点做分裂点
2.同方向插入,若往同一方向插入5个,并且在当前定位之后还有3个,则分裂点为定位之后的第三条,不是3个就将当前定位点计做分裂点
Cardinality值
高访问性:基本不重复(不大众,不至于一搜索出来很多相似结果)
高访问性的使用B+树索引更有意义
Cardinality值表示索引中不重复记录数量的预估值,越接近1越好
InnoDB存储引擎在统计Cardinality值时是在存储引擎层采样统计(频繁统计不方便),当表中1/16的数据发生变化,或stat_modified_counter值大于20亿时进行更新
统计Cardinality值方法:
获取B+树中叶子节点数量A;随机抽取8个,分别统计所需记录个数Pi;
最后(P1 + P2 ……+ P8) *A / 8
B+树索引的应用
1.联合索引
对表上的多个列进行索引,键值大于等于2个
2.覆盖索引
在辅助索引上可以查到的记录不需要再访问聚集索引
哈希算法
InnoDB也可以使用哈希算法进行字典查找,所模的值大小为大于缓冲池页数量二倍的质数