索引数据结构
Hash
哈希索引即采用一定的哈希算法将键值转化为哈希值,得到数据的存放位置,检索时一次哈希即可找到对应的位置,查询速度极快,时间复杂度O(1)
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,既然 Hash 索引的效率要比 B树索引 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?
原因:
1. Hash索引只支持等值比较
由于哈希的无序性,无法进行范围查找及排序操作
2. Hash 索引不支持多列联合索引的最左匹配规则
对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。
3. Hash索引在任何时候都不能避免表扫描
Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值(哈希碰撞),所以即使取满足某个 Hash 键值的数据的记录条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。
B树
在理解的B树这种数据结构之前,先搞懂二叉树概念,二叉树即N个节点包括根节点及两棵左右互不相交