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

 更新时间:2022年03月02日 16:50:54   作者:小小茶花女  
这篇文章主要为大家详细介绍了MySQL之MyISAM存储引擎的非聚簇索引,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容! 

相关文章

  • 8种MySQL分页方法总结

    8种MySQL分页方法总结

    这篇文章主要介绍了8种MySQL分页方法总结,小编现在才知道,MySQL分页竟然有8种实现方法,本文就一一讲解了这些方法,需要的朋友可以参考下
    2015-01-01
  • MYSQL 运算符总结

    MYSQL 运算符总结

    这篇文章主要介绍了MYSQL 运算符,MySQL支持的算术运算符有加法、减法、乘法、除法返回商、除法返回余数,下面来看看文章的详细介绍,需要的朋友可以参考一下
    2021-11-11
  • MySQL数据库优化之分表分库操作实例详解

    MySQL数据库优化之分表分库操作实例详解

    这篇文章主要介绍了MySQL数据库优化之分表分库操作,结合实例形式详细分析了mysql数据库分表分库垂直拆分、水平拆分相关原理以及应用案例,需要的朋友可以参考下
    2020-01-01
  • MySQL数据库InnoDB数据恢复工具的使用小结详解

    MySQL数据库InnoDB数据恢复工具的使用小结详解

    本篇文章是对MySQL数据库InnoDB数据恢复工具的使用进行了详细的总结与分析,需要的朋友参考下
    2013-06-06
  • MySQL中的隐藏列的具体查看

    MySQL中的隐藏列的具体查看

    mysql中存在一些隐藏列,例如行标识、事务ID、回滚指针等,不知道大家是否和我一样好奇过,要怎样才能实际地看到这些隐藏列的值呢,感兴趣的可以了解一下
    2021-09-09
  • MySQL数据库忽略大小写的配置方法

    MySQL数据库忽略大小写的配置方法

    这篇文章主要给大家介绍了MySQL数据库忽略大小写的配置方法,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • MySQL并行DDL的实现方法

    MySQL并行DDL的实现方法

    本文详细介绍了MySQL8.0.27并行DDL的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • 使用ORM新增数据在Mysql中的操作步骤

    使用ORM新增数据在Mysql中的操作步骤

    这篇文章主要介绍了使用ORM新增数据在Mysql中,但是在这需要注意需要大家新建ORM模型,具体搭建步骤及详细过程跟随小编一起看看吧
    2021-07-07
  • MySQL DQL语句的具体使用

    MySQL DQL语句的具体使用

    本文主要介绍了MySQL DQL语句的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • MySQL中的当前读和快照读的区别

    MySQL中的当前读和快照读的区别

    在MySQL中,当前读和快照读是事务中的两种重要的读取方式,当前读,即锁定读,会对读取的行记录加锁,确保数据一致性,两者的主要区别在于锁定机制、数据一致性、并发性能和幻读问题,理解这些差异有助于根据业务需求选择合适的读取方式,保证数据库的事务隔离性和一致性
    2024-09-09

最新评论