Mysql索引的数据结构,各?优劣
索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+树索引等,
InnoDB存储引擎的默认索引实现为:B+树索引。对于哈希索引来说,底层的数据结构就是哈希
概要 索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+树索引等, InnoDB存储引擎的默认索引实现为:B+树索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候(根据订单号、运单号、id查询场景),可以选择哈希索引,查询性能最快;其余?部分场景,建议选择BTree索引。 「B+树索引」 多条件范围查询场景 B+树是?个平衡的多叉树,从根节点到每个叶?节点的?度差值不超过1,?且同层级的节点间有指针相互连接。在B+树上的常规检索,从根节点到叶?节点的搜索效率基本相当,不会出现?幅波动,?且基于索引的顺序扫描时,也可以利?双向指针快速左右移动,效率?常?。因此,B+树索引被?泛应?于数据库、?件系统等场景。 「哈希索引」 单维度指定条件查询 哈希索引就是采??定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶?节点逐级查找,只需?次哈希算法即可?刻定位到相应的位置,速度?常快,如果是等值查询(where orderid=‘xxx’),那么哈希索引明显有绝对优势,因为只需要经过?次算法即可找到相应的键值;前提是键值都是唯?的。如果键值不是唯?的,就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据; 如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,有可能变成不连续的了,就没办法再利用索引完成范围查询检索; 总结 哈希索引也没办法利用索引完成排序mysql索引表,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实本质上也是范围查询);哈希索引也不支持多列联合索引的最左匹配规则; B+树索引的关键字检索效率?较平均,不像B树那样波动幅度?,在有?量重复键值情况下,哈希索引的效率也是极低的,因为存在哈希碰撞问题。 (编辑:武汉站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |