MySQL索引数据结构选择

索引index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

1、优缺点:

优势:

  •  提高数据检索的效率,降低数据库的IO成本。
  • 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。

劣势:

  • 索引列也要占用空间的。
  • 索引大大提高了查询效率,同时也降低更新表的速度,如果对表进行INSERTUPDATEDELETE时,效率降低。

2、索引结构:

Mysql的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种

  • B+Tree索引:最常见的索引类型,大部分引擎都支持B+树索引;
  • Hash索引:底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询;
  • tree(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少;
  • Full-text(全文索引):是一种通过建立倒排索引,快速匹配文档的方式,类似于LuceneSolrES

  

3、数据结构特点分析:

 二叉树

  • 二叉树:顺序插入时,会形成一个链表,查询性能大大降低,大数量情况下,层级较深,检索速度慢。
  • 红黑树:大数据量情况下,层级较深,检索速度慢。

B-Tree

 

B+Tree 

B+Tree相对于B-Tree区别:所有的数据都会出现在叶子节点;叶子节点形成一个单向链表;

MySQL索引数据结构对经典的B+Tree进行了优化,在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。

Hash

哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也成为hash碰撞),可以通过链表来解决。

 

特点:

  • hash索引只能用于对等比较(=in),不支持范围查询(between><);
  • 无法利用索引完成排序操作;
  • 查询效率高,通常只需要一次检索就可以了,效率通常要高于B+Tree索引;
  • MySQL中,支持hash索引的是Memory引擎,而InnoDB中具有自适应hash功能,hash索引是存储引擎根据B+Tree索引在指定条件下自动构建的;

4、总结为什么选择B+Tree:

  • 相对于二叉树,层级更少,索引效率高;
  • B-Tree无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针跟着减少,要同样保存大量数据行,只能增加树的高度,导致性能降低;
  • 相对于hash索引,B+Tree支持范围匹配及排序操作; 

小贴士:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html  数据结构可视化网站

 

posted @   熊掌和鱼  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示