当前位置: 首页 > news >正文

MySQL的InnoDB引擎中的聚簇索引和非聚簇索引有什么区别?

聚簇索引:聚簇索引之所以叫聚簇索引,是因为它将数据存储与索引放到了一块。聚簇索引采用 B+ 树的数据结构,它的非叶子节点存储索引键值指向子节点的指针,叶子节点存储 完整的数据行。一个表只能有一个聚簇索引,聚集索引选取规则如下:

  • 如果表定义了主键(PRIMARY KEY),则主键自动成为聚簇索引。

  • 如果没有主键,InnoDB会选择第一个唯一的非空索引(UNIQUE NOT NULL)作为聚簇索引。

  • 如果既无主键也无唯一索引,InnoDB会隐式生成一个隐藏的ROW_ID列作为聚簇索引。

在查找效率上,通过聚簇索引查询时,可以直接定位到数据行,无需回表。

非聚簇索引(又叫二级索引):非聚簇索引之所以叫非聚簇索引,是因为它将数据与索引分开存储。非聚簇索引也是采用 B+ 树的数据结构,它的非叶子节点存储索引键值指向子节点的指针,叶子节点存储 索引键值主键值。一个表可以有多个非聚簇索引。通过非聚簇索引查询时,需要先找到主键,再通过聚簇索引回表查询完整数据(称为回表查询)。以下是回表查询的例子:

非聚簇索引如何避免回表:如果查询的字段全部包含在索引中(如联合索引),可避免回表,直接通过索引返回结果。

相关文章:

  • 二级公共基础之数据库设计基础(一) 数据库系统的基本概念
  • 内容中台重构企业内容管理的价值维度与实施路径
  • 自动化测试是什么?如何学习自动化测试?为什么要做自动化测试?
  • 解决数据库建表错误:ERROR 1064 (42000) You have an error in your SQL
  • VantUI官网更新2025,移动端前端开发
  • 【Jenkins】显示 HTML 标签
  • 小智AI桌宠机器狗
  • 测试面试题:以一个登录窗口为例,设计一下登录界面测试的思路和方法
  • DirectX12(D3D12)基础教程三 线性代数与3D世界空间
  • SpringAI 快速开发Deepseek
  • 跟着AI学vue第十章
  • 【创建模式-构建模式(Singleton Pattern)】
  • 【YOLOv10改进[注意力]】引入DICAM机制(多尺度特征提取和通道注意力机制) | 水下图像增强
  • 眼见不一定为实之MySQL中的不可见字符
  • Elasticsearch索引设计与分片策略深度优化-手记
  • Spring Boot 2/3.x 中 MultipartFile 接收问题深度解析与实战解决方案
  • 数据库的MVCC如何理解?
  • 最全 Neo4j 可视化图形数据库的工具
  • 小程序高度问题背景scss
  • Spring Boot 3 整合 Spring Cloud Gateway 工程实践
  • php做网站需要html/杭州百度seo优化
  • 广东建设监理协会网站题库/aso优化技巧
  • 在虚拟主机上建设多个网站/搜索引擎优化方法有哪几种
  • 带商城的wordpress/谷歌优化seo
  • 做好网站建设工作/百度seo优化包含哪几项
  • 濮阳建站公司流程/数据指数