当前位置:网站首页>Mysql索引结构
Mysql索引结构
2022-07-30 11:59:00 【也拟泛轻舟~】
在 MySQL 中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论 MyISAM 和 InnoDB 两个存储引擎的索引实现方式。
MyISAM 索引实现
MyISAM 引擎使用 B+Tree 作为索引结构,叶节点的 data 域存放的是数据记录的地址。下图是 MyISAM 索引的原理图:
这里设表一共有三列,假设我们以 Col1 为主键,则图 8 是一个 MyISAM 表的主索引(Primary key)示意。可以看出 MyISAM 的索引文件仅仅保存数据记录的地址。
在 MyISAM 中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求 key 是唯一的,而辅助索引的 key 可以重复。如果我们在 Col2 上建立一个辅助索引,则此索引的结构如下图所示
同样也是一颗 B+Tree,data 域保存数据记录的地址。因此,MyISAM 中索引检索的算法为首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,则取出其data 域的值,然后以 data 域的值为地址,读取相应数据记录。
InnoDB 索引实现 (B+Tree 作为索引结构)
1、非叶子节点不存储data 只存储索引 可以放更多的索引
2、并且每个索引后面都会跟有一个指向下一页的指针,提高区间访问的性能
3、叶子节点包含所有索引字段*
** innodb只会有一个聚集索引 如果建立了主键 主键就是聚集索引
叶节点包含了完整的数据记录 也就是索引所在行的整行数据**
首先我们来看下一颗层高为3的b+树可以存放多少条数据
mysql页默认大小16k,如果数据行大小1k,叶子节点存放的完整数据,则叶子节点一页可以放16条数据;非叶子节点页面存放的是主键和指针,所以主要看主键是啥类型,假设是long,则长度8字节,指针大小在innodb是6字节,一共14字节,所以非叶子节点每页可以存16384/14=1170个主键数据(1170个分叉),则三层b+树数据可以存1170117016=21902400条数据。(千万级别)
首先我们要认识到索引是排好序的
主键索引:

上图是 InnoDB 主键索引(同时也是数据文件)的示意图,叶节点包含了完整的数据记录。这种索引叫做聚集索引。因为 InnoDB 的数据文件本身要按主键聚集
InnoDB 要求表必须有主键(MyISAM 可以没有),若未建立主键 数据库选择所有数据不相同的列建立b+tree 如果所有列都不符合 那么mysql会建立一个隐藏列来维护数据(rowid)
尽量在 InnoDB 上采用自增字段做表的主键
首先整型的大小容易比较 uuid需要通过asc码逐一比较 整型的索引占用空间比较小
若使用非自增 后续插入可能在已放满的索引页里新增数据 会造成索引页分页 还有就是非页子节点索引的一个重新平衡 消耗性能。
如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页
辅助索引:
辅助索引 data 域存储相应记录主键的值而不是地址。换句话说,InnoDB 的所有辅助索引都引用主键作为 data 域。
所以非主键索引要做一次回表操作 通过获取到的主键再去定位一遍
边栏推荐
- Bagging-Blending Multi-Model Fusion Short-Term Electricity Load Forecasting Based on Weighted Grey Correlation Projection
- Flexible distribution parameters of mechanical system modeling and control of research and development
- IO/multiplexing (select/poll/epoll)
- Matlab基础(2)——向量与多项式
- 英 文 换 行
- 使用百度EasyDL实现明厨亮灶厨师帽识别
- 基于声信道分析的电缆隧道人员定位技术
- 【MySQL系列】-B+树索引和HASH索引有什么区别
- 解码Redis最易被忽视的CPU和内存占用高问题
- 概率论的学习整理--番外1:可重复且无次序的计数公式C(n+k-1,k) 的例题 : 同时丢3个骰子,会有多少种情况?答案不是216而是56!
猜你喜欢

Based on MySQL database, Redis cache, MQ message middleware, ES high availability scheme of search engine parsing

域名怎么注册备案解析?

嵌入式环境下并发控制与线程安全

反转链表-迭代反转法

Leetcode 125. 验证回文串

Rust from entry to proficient 02-installation

Reverse linked list - recursive inversion method

维护数千规模MySQL实例,数据库灾备体系构建指南

亚洲高校首现KDD博士论文奖:清华裘捷中获Runner Up奖,WINNER奖也是位华人

C language - bitwise operations
随机推荐
Static LED display developed by single chip microcomputer
基于滑模控制的不确定中立型系统有限时间稳定
概率论的学习和整理--番外4: 关于各种平均数:算术平均数,几何平均数,调和平均数,以及加权平均数和平方平均数 (未完成)
来n遍剑指--04. 二维数组中的查找
基于多目标两阶段随机规划方法的电热联合系统调度
基于空间特征选择的水下目标检测方法
Based on the analysis of the acoustic channel cable tunnel positioning technology
Get the original data API on 1688app
[BJDCTF2020]Cookie is so stable-1|SSTI注入
C language - bitwise operations
Explain the problem of change exchange in simple terms - the shell of the backpack problem
2022-07-29 顾宇佳 学习笔记 异常处理
干货分享:小技巧大用处之Bean管理类工厂多种实现方式
刷屏了!!!
TensorFlow custom training function
Niuke-TOP101-BM42
Current relay JL-8GB/11/AC220V
概率论的学习和整理7:理解期望和方差还是要回到随机试验本身,期望不是平均值,方差的公式不同情况不同
Zhou Hongyi: Microsoft copied the 360 security model and became the largest security company in the United States
数据湖(十八):Flink与Iceberg整合SQL API操作