目录
1.索引是什么:索引是帮助MySQL高效获取数据的排好序的数据结构
2.索引未采用数据结构
3.索引的数据结构
3.MyISAM存储结构
4.InnoDB存储结构
5.联合索引底层数据结构
1.索引是什么:索引是帮助MySQL高效获取数据的排好序的数据结构
2.索引未采用数据结构
1.二叉树(没有采用)原因:二叉树存在单边增长,树的高度高,效率低
2.红黑树(没有采用)原因:红黑树高度原因,效率也很低
3.hash表(没有采用)原因:不能实现范围查找,hash值没办法支持排序,组合索引会将几个字段合并hash,没办法支持部分索引,hash冲突的概率也会非常大。
哈希索引基于哈希表实现,只有精确索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希存储在索引中,同时在哈希表中保存指向每个数据的指针。
哈希索引中存储的是:哈希值+数据行指针
4.B-Tree(没有采用)原因:范围查询效率低如图
当查询大于5的元素时,当找到5后,因此要找,7,9,11,13,14,不得不从根节点遍历,所以效率低。
3.索引的数据结构
B+Tree(B-Tree变种)
※非叶子节点不存储data,只存储索引,可以放下更多索引
※顺序访问指针,提高区间访问的性能
3.MyISAM存储结构
索引文件和数据文件分离的
4.InnoDB存储结构
主键采用整型自增可以降低,添加元素时维护B+的概率,维护B+会很耗时。
5.联合索引底层数据结构
先根据第一个字段排序,第一个字段相同按照第二个字段排序,以此类推。