【MySQL】聚簇索引与非聚簇索引

聚簇索引

索引就是数据,数据就是索引

特点:

  • 页内的数据使用单向链表进行连接,页和页之间通过双向链表进行连接。
  • B+树的叶子节点存储的是完整的数据记录,也就是说记录中存储了所有的键值。

此种类型的索引并不需要我们手动创建,InnoDB存储引擎会自动帮助我们去创建

  • 一般情况下,每个MySQL表只会有一个聚簇索引,通常选择主键列进行索引的构建。
  • 若没有主键,InnoDB会选择非空的唯一索引进行替代,如果没有这样的索引,存储引擎会隐式定义一个主键来作为聚簇索引。

优点:

  • 数据访问快
  • 节省了大量的数据IO操作

缺点:

  • 插入速度严重依赖于插入顺序
  • 更新主键的代价很高

为了充分利用聚簇索引的特性,InnoDB表的主键通常选择有序的顺序ID来作为主键,不推荐用无序的ID,如:UUID、MD5等

非聚簇索引

在其他字段上建立的索引称之为非聚簇索引,或者二级索引。

页内数据不是完整的数据记录,而是创建索引时所指定的列,以及这条记录的主键值。

页内数据按照指定列的数据进行升序排列。

此时如果执行 select * 语句,首先通过非聚簇索引找到这个字段值对应的主键值,然后再回到上述聚簇索引中在进行一次查找,此过程称之为回表。

联合索引就是非聚簇索引

相关推荐
Lethehong8 小时前
Oracle 加个字段,目标库就报错?KFS 用“先拆后组“打通异构 DDL
数据库·oracle
Web极客码8 小时前
锁定真正的磁盘卡顿:我用 OpenCode 配合 eBPF 诊断 NVMe 队列深度延迟与 I/O 写放大
数据库·oracle
cspttty9 小时前
2027用户研究求职准备:应用统计学如何补齐研究设计与业务表达
大数据·数据库
roman_日积跬步-终至千里10 小时前
【数据Agent论文·查询与语义|05】Spider:为什么换一个数据库,模型就不会查了?
数据库·数据分析
猫咪很可爱10 小时前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle
XLYcmy11 小时前
《数字经济赋能城市低碳治理的路径研究检索报告》审阅与修改指导意见——基于完整检索报告体例的完整性诊断、学术规范核查与方法论纠偏 上
数据库·ai·chatgpt·文心一言·检索·知网·豆包
泡海椒11 小时前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql
ss27311 小时前
PG实战笔记 | 09 PostgreSQL psql客户端基本操作
数据库·笔记·postgresql
电商API_1800790524711 小时前
反向海淘多币种结算:汇率该在哪个时点被冻结
java·开发语言·数据库·跨境电商·1688 api
搞AI的金鱼12 小时前
skill agent workflow的区别
数据库