MySQL之MyISAM存储引擎的非聚簇索引详解


Posted in MySQL onMarch 03, 2022

在InnoDB中索引即数据,也就是聚簇索引的那颗B+树的叶子节点中已经包含了所有完整的用户记录。MyISAM的索引方案虽然也是使用树形结构,但是却将索引和数据分开存储,这种索引也叫非聚簇索引。

create table index_demo(
	c1 int,
	c2 int,
	c3 char(1),
	primary key(c1)
) ROW_FORMAT=COMPACT;

将表中的记录按照记录的插入顺序单独存储在一个文件中,这个文件并不划分为若干个数据页,有多少记录就往这个文件中塞多少个记录,这样一来,我们就可以通过行号快速访问到一条记录。在表中使用MyISAM作为存储引擎时,它的记录在存储空间中的表示如图:

MySQL之MyISAM存储引擎的非聚簇索引详解

由于在插入数据时并没有刻意按照主键大小排序,所以我们不能再这些数据上使用二分法进行查找,使用MyISAM存储引擎的表会把索引信息单独存储在另外一个文件中,称为索引文件。MyISAM会为表的主键单独创建一个索引,只不过在索引的叶子节点中存储的不是完整的用户记录,而是主键值和行号的组合。也就是先通过索引找到对应的行号,再通过行号去找对应的记录。

MySQL之MyISAM存储引擎的非聚簇索引详解

在InnoDB存储引擎中,我们只需要根据主键值对聚簇索引进行一次查找就能找到对应的记录;在MyISAM存储引擎中,需要进行一次回表操作,这也意味着MyISAM中建立的索引相当于全部都是二级索引。

MyISAM会直接在索引叶子节点处存储该条记录在数据文件中的地址偏移量。由此可以看出MyISAM的回表操作时十分快速的,因为它是拿着地址偏移量直接到文件中取数据,而InnoDB是通过获取主键之后再去聚簇索引中找记录,虽然说不慢,但是也比不上直接用地址去访问。

如果有必要,我们也可以为其他列分别建立索引或者建立联合索引,其原理与InnoDB中索引差不多,只不过在叶子节点处存储的是相应的列+行号,这些索引页全部都是二级索引。

MySQL之MyISAM存储引擎的非聚簇索引详解

可以看到对于非聚簇索引,不管是以主键为排序规则还是以非主键为排序规则,它的结构都是相同的,即叶子节点存放的都是相应的列+行号。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容! 

MySQL 相关文章推荐
MySQL表的增删改查基础教程
Apr 07 MySQL
一篇文章弄懂MySQL查询语句的执行过程
May 07 MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
MySQL Router实现MySQL的读写分离的方法
May 27 MySQL
MySQL CHAR和VARCHAR该如何选择
May 31 MySQL
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
Aug 02 MySQL
SpringBoot连接MySQL获取数据写后端接口的操作方法
Nov 02 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
MySql重置root密码 --skip-grant-tables
Apr 11 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
MySQL数据库Innodb 引擎实现mvcc锁
May 06 MySQL
MySQL导致索引失效的几种情况
Jun 25 MySQL
MySQL中B树索引和B+树索引的区别详解
MySQL的InnoDB存储引擎的数据页结构详解
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 #MySQL
SQL注入篇学习之盲注/宽字节注入
MySQL为数据表建立索引的原则详解
Mar 03 #MySQL
MySQL数据库完全卸载的方法
千万级用户系统SQL调优实战分享
Mar 03 #MySQL
You might like
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
php给图片加文字水印
2015/07/31 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
常用jQuery选择器总结
2014/07/11 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
python函数装饰器用法实例详解
2015/06/04 Python
python dataframe astype 字段类型转换方法
2018/04/11 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
普天C++笔试题
2016/03/20 面试题
自荐信格式范文
2013/10/07 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
创优争先心得体会
2014/09/11 职场文书
廉政承诺书
2015/01/19 职场文书
学习雷锋主题班会
2015/08/14 职场文书
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL
源码分析Redis中 set 和 sorted set 的使用方法
2022/03/22 Redis
MySQL存储过程及语法详解
2022/08/05 MySQL