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 05 MySQL
MySQL Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
Mysql 用户权限管理实现
May 25 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
Jun 26 MySQL
VS2019连接MySQL数据库的过程及常见问题总结
Nov 27 MySQL
MySQL 主从复制数据不一致的解决方法
Mar 18 MySQL
mysql查询结果实现多列拼接查询
Apr 03 MySQL
Golang连接并操作MySQL
Apr 14 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
Apr 29 MySQL
MySQL transaction事务安全示例讲解
Jun 21 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
聊天室php&mysql(二)
2006/10/09 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
yii2.0实现pathinfo的形式访问的配置方法
2016/04/06 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
jQuery使用手册之一
2007/03/24 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
实例讲解Python中的私有属性
2014/08/21 Python
django 自定义用户user模型的三种方法
2014/11/18 Python
Python异常处理操作实例详解
2018/05/10 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
Pycharm中import torch报错的快速解决方法
2020/03/05 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
开放系统互连参考模型
2016/06/29 面试题
介绍一下grep命令的使用
2012/06/28 面试题
租房协议书
2014/04/10 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
应聘英语教师求职信
2014/04/24 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
2015年见习期工作总结
2014/12/12 职场文书
反腐倡廉观后感
2015/06/08 职场文书
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis