MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
索引方法
Mysql的索引方法有两种,BTERR和HASH。
散列表(Hash Table)和B+Tree 都是一些常用的数据结构,再数据结构前篇中介绍过一些,关于散列表和树的数据结构,后续也会在《数据结构后篇》中总结一下。
Hash
Hash索引如何提高查询速度
Hash索引是将索引键通过Hash运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个Hash表(可以是数组结构)中。
那很显然采用Hash索引,在不考虑Hash冲突的情况下,通过Hash索引的可以一次定位数据,效率要比 BTree高很多。
Hash索引缺陷
Hash函数对索引健运算后,索引无法保证与索引健值大小一致,所以Hash索引有明显缺陷,就是不支持范围查询;无法利用索引的数据来避免sql查询的排序运算;对组合索引而言因为是组合健值进行Hash运算,所以无法使用部分索引让组合索引生效。
Hash索引使用场景
那只需要做等值比较查询,而不包含排序或范围查询的需求,都适合使用哈希索引
B+Tree
B树(B-Tree)属于多叉树又名平衡多路查找树,那B+数属于改进版的B树,
B树跟B+树的不同点
B+ 树中的节点不存储数据,只是索引,而B树中的节点存储数据
B 树中的叶子节点并不需要链表来串联。
B+Tree如何提高查询速度
B+Tree利用平衡查找树的有序性和高效遍历性,和B+Tree构建的有限高度的多叉树,通过IO次数的降低和查询遍历效率的提高,来提高查询速度。
平衡查找树的特点比较简单,后续也会在《数据结构后篇》中总结一下
已区间查询为例,B+Tree数据结构中只需要定位到区间起点值对应在树中的结点,然后从这个结点开始,按照平衡查找树的遍历方法继续遍历,直到区间终点对应的结点为止,这期间遍历得到的数据就是满足区间值的数据。
类似于我们在《常用数据结构前篇》中提到的跳表的原理。利用局部数据,一层一层靠近查询数据。
B+Tree索引使用场景
Mysql数据库中使用最为频繁的索引类型,不仅仅在 MySQL中是如此,实际上在其他的很多数据库管理中BTREE索引也同样是作为最主要的索引类型
扫一扫,关注我