MySql索引底层数据结构

本文详细介绍了Mysql中的索引类型和数据结构,重点讲解了B+Tree作为Mysql主要索引结构的特点,包括其节点分布、数据存储方式以及优化查询的优势。同时,对比了不同数据引擎如MyISAM和InnoDB在索引实现上的差异,强调了InnoDB的聚集索引特性以及如何避免回表操作以提升查询效率。最后,讨论了Mysql在大数据量场景下的分库分表策略。
摘要由CSDN通过智能技术生成

索引:索引是Mysql快速获取数据的一种数据结构。

索引的数据结构有哪些?

  • 二叉树:能一定程度的优化查询速度,但是容易出现单边树(无法优化查询效率)

  •  红黑树:和二叉树一个道理,也可能出现单边树

        

  • Hash表:能提高具体索引字段的查询效率,但是无法排序。
  • B-Tree:所有的节点包含数据,节点数据从左往右递增排列

        

  • B+Tree(B-Tree变种):

        MySql真正使用的索引的数据结构是B+Tree

  1. 非叶子节点不存储data,只存储索引(高级冗余),可以存放更多字段
  2. 叶子节点包含所有索引字段,从左到右依次递增
  3. 叶子节点有双向指针相连,提高访问效率

Mysql最终使用的索引数据结构为B+Tree。

B+Tree单个节点的分配空间大小为16KB(大概估算:1170*1170*16≈2000W),所以一般生产环境上Mysql单表存放一般是一千万数据,更多的数据采用分库分表存储(MySql横向扩容是很方便的)。

Mysql用的数据引擎(数据引擎是针对表的,并不是针对数据库):

  • MyISAM

        索引的数据结构为非聚集索引(叶子节点存放主键的指针),索引文件和数据文件分离,查询完后需要回表。该数据引擎不支持数据。

  • InnoDB

        索引的数据结构为聚集索引(主键索引叶子节点会存放整条数据),其他索引(组合索引、唯一索引、普通索引)检索完后,如果索引内包含所需要返回的索引字段,则不需要回表(这里的回表指再次查询主键索引,拿到所需要的的字段,而不是读取数据文件),如果不包含,则存在回表操作,在实际的索引优化中,尽量使用覆盖索引,避免回表操作。推荐使用自增主键(在新增数据的时候,直接在索引后面追加数据,而不是插入)。如果表中没有主键的时候,数据表会虚拟一个主键,以虚拟的主键生成主键索引。

      

MySQL 索引底层数据结构主要有 B-Tree 和 Hash 结构两大类。 ### B-Tree B-Tree 是一种自平衡的树形数据结构,主要用于数据库和其他需要快速查找、插入和删除操作的数据存储系统中。它有以下几个关键特征: 1. **节点层次**:每个节点可以有多个子节点,并允许包含多个键值对,使得数据可以在树的较高层存储,提高查询效率。 2. **最大值限制**:节点中包含的最大键的量是由节点的最大度(分支因子)决定的。这意味着在同一级的节点之间存在某种形式的均匀分布。 3. **排序**:所有键都按升序排列,同时其左右子节点分别存储比当前节点小和大的键值部分。 4. **平衡**:通过调整内部结点的高度,保持整棵树的平衡状态,确保所有的路径长度大致相等。 ### Hash 结构 Hash 结构用于快速定位特定键对应的值。其核心在于利用哈希函将键转换成一个哈希码,然后用这个哈希码作为索引来直接访问存储位置。 1. **哈希表**:基本的 hash 数据结构就是一个组,每个元素对应着一个桶。当插入新元素时,使用哈希函计算出该元素应该存放的位置,即哈希码对应的组下标。 2. **冲突解决**:由于不同的键可能会得到相同的哈希码,因此需要策略处理这种冲突情况,常见的解决办法包括线性探测、链地址法和二次探查等。 3. **动态调整**:为了维持性能,哈希表通常会通过调整大小或重新哈希函等方式来应对负载增加的情况。 ### MySQL 中的索引应用 MySQL 使用 B-Tree 结构来构建其默认类型的索引(如BTREE),这使得索引具有高效搜索、插入和删除的特点。对于 Hash 索引,则在某些场景下提供更快的查找速度,尤其是在单个列上使用并且数据集不是常庞大时。 了解索引底层数据结构有助于优化查询性能,合理设计数据库结构和查询语句,以及更好地理解和管理数据库的运行状况。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值