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

news/2025/2/25 10:13:40

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

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

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

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

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

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

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


http://www.niftyadmin.cn/n/5865367.html

相关文章

Linux项目自动化构建工具-make/Makefile (linux第六课)

目录 背景 介绍 依赖关系的格式 依赖方法的格式 原理 背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定…

【杂谈】-强化学习遇见链式思维:将大型语言模型转变为自主推理代理

强化学习遇见链式思维:将大型语言模型转变为自主推理代理 文章目录 强化学习遇见链式思维:将大型语言模型转变为自主推理代理1、LLMs中自主推理的必要性1.1 传统LLMs的局限性1.2 链式思维(CoT)提示的不足1.3 推理中强化学习的必要…

sklearn中的决策树-分类树:剪枝参数

剪枝参数 在不加限制的情况下,一棵决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止。这样的决策树 往往会过拟合。为了让决策树有更好的泛化性,我们要对决策树进行剪枝。剪枝策略对决策树的影响巨大,正确的剪枝策…

CoralStyle CLIP 技术浅析(四):多层次特征融合

CoralStyle CLIP 是一种结合了 CLIP(Contrastive Language–Image Pretraining)和 CoralStyle 多风格图像生成技术的模型。其核心在于通过多层次特征融合技术,将文本和图像的特征进行高效融合,从而实现跨模态的语义对齐和风格化生成。 1. 多层次特征提取 1.1 图像特征提取…

ELK之elasticsearch基本使用教程

文章目录 ELK包含技术elasticsearch基本介绍倒排索引正向索引倒排索引正向和倒排 es的一些概念文档和字段索引和映射mysql与elasticsearch 安装es、kibana创建网络加载镜像安装分词插件 索引库操作mapping映射属性索引库的CRUD创建索引库和映射基本语法:示例&#x…

23种设计模式的cpp举例

下面介绍经典的23种设计模式,并分别用C示例代码加以说明。本文分为三大类:创建型模式、结构型模式和行为型模式,每种模式简要说明其意图、关键思想和优缺点,并给出一个精简的C代码示例。 一、创建型模式 创建型模式关注对象的创建…

使用dict对嵌套列表进行求和及优化案例

文章目录 案例背景示例数据 使用 dict 求和步骤说明代码实现 优化说明 在数据处理和分析中,经常需要将嵌套列表中的数据进行汇总和计算。 本文将通过一个实际案例,展示如何使用 dict 和 dict.get() 方法对嵌套列表进行求和操作。 案例背景 假设你是一名…

20分钟 Bash 上手指南

文章目录 bash 概念与学习目的第一个 bash 脚本bash 语法变量的使用位置参数管道符号(过滤条件)重定向符号条件测试命令条件语句case 条件分支Arrayfor 循环函数exit 关键字 bash 脚本记录历史命令查询文件分发内容 bash 概念与学习目的 bash&#xff0…