MySQL中InnoDB的一级索引、二级索引 即聚簇索引 密集索引和稀疏索引

本文详细解析了InnoDB数据库引擎中聚簇索引的工作原理。阐述了当表定义有主键时,主键索引即为聚簇索引;若无主键,则MySQL会选择第一个唯一且非空的索引作为聚簇索引,或自动生成一个六字节的隐藏ID作为聚簇索引。此外,还介绍了聚簇索引与二级索引的区别,以及密集索引和稀疏索引的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自https://blog.youkuaiyun.com/roxliu/article/details/70160664

聚簇索引:表数据文件本身就是按B+Tree组织的一个索引结构(它的物理存放顺序和逻辑顺序一一对应),这棵树的叶节点data域就是数据页,因此保存了完整的数据记录。innodb主键索引是是用聚簇索引来组织表且真实物理存储顺序只有一种,因此一个表中必须要有一个主键索引,如果没有设置聚集索引,默认使用主键来作为聚集索引。

 

每个InnoDB表具有一个特殊的索引称为聚簇索引(也叫聚集索引,聚类索引,簇集索引)。

如果表上定义有主键,该主键索引就是聚簇索引。

如果未定义主键,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚簇索引。

如果没有这样的列,InnoDB就自己产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作为聚簇索引。

表中的聚簇索引(clustered index )就是一级索引,除此之外,表上的其他非聚簇索引都是二级索引,又叫辅助索引(secondary indexes)。
 

有时候会看到网上说什么密集索引和稀疏索引,其实这里的密集指的就是每个索引记录上有没有包含整条数据记录。

有包含就叫密集索引

没有包含就叫稀疏索引

比如说聚簇索引就叫密集索引,其他索引就叫稀疏索引

不过密集索引和稀疏索引也有另一种实现,像Kafka实现的稀疏索引就是,不是所有数据都加对应的索引记录,而是每隔一定的字节数建立了一条索引,在查数据时,先查出离这个数据最近的索引,然后再从最近索引出发,往下查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值