浅析MySQL存储引擎中的索引

文 / @UTHEME

浅析MySQL存储引擎中的索引

MySQL是一种流行的关系型数据库管理系统,其实现了多种存储引擎,每个存储引擎都有其独特的特性和优缺点。其中,索引是MySQL数据库中非常重要的组成部分,通过索引可以加速数据的查找和访问。本文将围绕MySQL存储引擎中的索引进行浅析。

在MySQL中,不同的存储引擎文件是不一样的。可以通过执行"show VARIABLES LIKE 'datadir';"命令来查看数据文件目录。其中,每张InnoDB的表有两个文件(.frm和.ibd),MyISAM的表有三个文件(.frm、.MYD、.MYI)。.frm是MySQL里面表结构定义的文件,不管你建表的时候选用任何一个存储引擎都会生成,我们就不细讲了。我们主要看一下其他两个文件是怎么实现MySQL不同的存储引擎的索引的。

MyISAM存储引擎的索引

在MyISAM里面,除了.frm文件外,还有两个文件:.MYD文件和.MYI文件。.MYD文件是MyISAM的数据文件,存放数据记录。而.MYI文件是MyISAM的索引文件,存放索引。在MyISAM中,索引和数据是两个独立的文件。

MyISAM中,B+Tree里面的叶子节点存储的是数据文件对应的磁盘地址。因此,从索引文件中检索到键值后,会到数据文件中获取相应的数据记录。对于主键索引和辅助索引,它们存储和检索数据的方式都是一样的,都是在索引文件里面找到磁盘地址,然后到数据文件里面获取数据。

InnoDB存储引擎的索引

在InnoDB里面,只有一个文件(.ibd文件),索引和数据都存储在这个文件里面。在InnoDB中,主键为索引来组织数据的存储的,因此索引文件和数据文件都在.ibd文件里面。

在InnoDB的主键索引的叶子节点上,直接存储了数据。这种索引成为聚集索引(聚簇索引),是指索引键值的逻辑顺序跟表数据行的物理存储顺序是一致的。在InnoDB中,主键之外的索引都是非聚集索引。对于非主键索引,存储着辅助索引和主键值。如果使用非主键索引进行查询,会根据主键值在主键索引中查询,最终取得数据。

如果一张表没有主键,则规则如下:

1、如果定义了主键(PRIMARY KEY),则InnoDB会选择主键作为聚集索引。

2、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。

3、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐藏的聚集索引,它会随着行记录的写入而主键递增。

小结

通过以上分析,我们了解了MySQL不同存储引擎中索引的实现方式。索引是数据库中非常重要的组成部分,对于提高数据库的性能有着至关重要的作用。在使用MySQL时,需要根据具体的需求选择合适的存储引擎和索引方案。如果想深入了解MySQL数据库,可以参考提供的MySQL视频教程。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。