聚集索引(Clustered Index)和非聚集索引(Non-Clustered Index)是索引设计的核心概念,二者的本质区别体现在 与数据物理存储的关联方式 上,这种区别直接决定了它们的性能特性和适用场景。

我们平时说的 聚簇索引非聚簇索引,其实就是 聚集索引非聚集索引,同一个东西,只是叫法不一样。现在在比较新的文献、资料中,习惯叫聚集索引和非聚集索引。

聚集索引:索引即数据的 "物理排列"

1、聚集索引的核心是 索引键的排序顺序与数据在磁盘上的物理存储顺序完全一致

2、可以类比为 按ISBN号来排序的图书馆书架(ISBN,International Standard Book Number,国际标准书号),书在书架上的物理顺序就是ISBN顺序(数据物理顺序=索引顺序),找书时直接按号码走到对应书架即可。

3、在数据库中,聚集索引的 叶子节点直接存储完整的行数据(而非指针)。也就是说,通过聚集索引找到叶子节点时,就能直接获取该行的所有字段值,无需额外查找

4、由于数据的物理存储顺序只有一种,一张表只能有一个聚集索引(这是最关键的限制),一般来说是 表的主键

5、聚集索引的 B+树 示图:

非聚集索引:索引与数据 "独立排序"

1、非聚集索引的索引键排序与数据的物理存储顺序 毫无关联,二者是相互独立的结构。

2、可以类比为 图书馆入口处的电脑搜索,可以按 作者/书名/主题 等多种方式搜索。在电脑处搜索,每次搜索实际指向 书在书架的实际位置(包含指针),我们需要先在电脑处搜索,再根据搜索出的位置信息去书架找书(二次查找)

3、在数据库中,非聚集索引的 叶子节点存储的是 "索引键值" 和 "指向数据物理位置的指针"。通过非聚集索引查询时,需要先找到叶子节点的指针,再根据指针去磁盘读取完整数据(这个过程又称为 "书签查找",也就是我们经常说的 "回表")。

4、由于不影响数据的物理存储,一张表可以创建多个非聚集索引(但数量过多会增加存储和维护成本)。

5、非聚集索引的 B+树 示图:

对比

对比维度聚集索引非聚集索引
与数据存储的关系决定数据的物理存储顺序(索引 = 数据顺序)与数据物理存储顺序无关(索引独立排序)
数量限制1 个(表的物理顺序唯一)多个(通常建议不超过 5-6 个,避免性能损耗)
叶子节点内容完整的行数据(包含所有字段)索引键值 + 指针(指向数据位置或聚集索引键)
查询性能(全量数据)极高(直接定位数据,无二次查找)相对聚集低一些(需先查索引,再通过指针找数据)
范围查询效率最优(数据连续存储,可批量读取)相对聚集差一些(需多次书签查找,数据分散)
对写入的影响插入 / 更新成本高(可能导致数据物理移动)插入 / 更新成本较低(仅需维护索引结构)

总结

  • 聚集索引是 "数据的物理排列方式",索引与数据绑定,全表只能有一个,磁盘IO效率 - "连续IO"
  • 非聚集索引是 "数据的目录",索引与数据独立,全表可以有多个,磁盘IO效率 - "随机IO"

别让过分苛求,阻碍了我们通往优秀的路,更不要因为追求完美,给自己施加太大压力,而不去行动。-- 烟沙九洲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92052.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92052.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92052.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《零基础入门AI:传统机器学习进阶(从拟合概念到K-Means算法)》

一、欠拟合与过拟合欠拟合(Underfitting) 欠拟合是指模型在训练数据上表现不佳,同时在新的未见过的数据上也表现不佳。这通常发生在模型过于简单,无法捕捉数据中的复杂模式时。欠拟合模型的表现特征如下: 训练误差较高。测试误差同样较高。模…

Datawhale AI夏令营 第三期 task2 稍微改进

在打造基于大语言模型(LLM)文档检索的问答系统中,财经研报类文档是最具挑战的场景之一。它包含图文混排、精细定位需求(页码、文件名)、问题措辞高度多样化等一系列复杂性。 下面的内容是大模型辅助整理的:…

LeetCood算法题~水果成篮

水果成篮 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水…

【Lua】题目小练8

-- 题目 1&#xff1a;定义一个类 Person-- 属性&#xff1a;name、age&#xff0c;其中 age 默认是 0&#xff0c;不能小于 0。-- 方法&#xff1a;introduce()&#xff0c;输出 "My name is <name>, I am <age> years old."-- 要求使用封装思想&#x…

SAP PP CK466

原因 作业价格没有维护 解决方案 KP26

如何解决pip安装报错ModuleNotFoundError: No module named ‘keras’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘keras’问题 摘要 在使用 PyCharm 进行深度学习项目开发时&#xff0c;常常需要通过 pip install keras 来安装 Keras 库。但有时即便命令执行成功&#xff0c…

人工智能领域、图欧科技、IMYAI智能助手2024年全年历史更新大事件汇总

2024年 2024年12月29日 【通知】 1、主站导出文档功能优化升级&#xff0c;新增支持了纯文本WORD导出功能&#xff0c;支持使用WPS软件打开 注&#xff1a;原来的富文本WORD不支持使用WPS打开&#xff0c;只支持系统自带的WORD软件打开&#xff0c;比如Microsoft Office Word 2…

UWB实操:使用UCI CMD测距;UCI CMD是一串数字,创建测距session,配置测距session,开始测距session。

使用UCI CMD测距; UCI CMD是一串数字,创建测距session,配置测距session,开始测距session。根据 FiRa_UCI_Technical_Specification,我们可以分析并组织测距cmd 例如: Fira2.0 1v1 发起 DSTWR 创建测距session:210000052222222200 配置测距session: 2103001F222…

从AUTOSAR角度理解CAN以及CANFD

一、AUTOSAR对CAN和CAN FD的基础定位 CAN&#xff1a;基于传统CAN 2.0B协议&#xff0c;是AUTOSAR早期版本&#xff08;如4.0.3及之前&#xff09;的核心车载通信协议&#xff0c;支持最大8字节 payload&#xff0c;仲裁段波特率通常≤1Mbps&#xff0c;适用于低带宽、高实时性…

第27章:服务部署与容器化

1. 课程引言 在前面的章节中&#xff0c;我们已经完成了电商项目核心服务的开发。然而&#xff0c;开发完成只是项目生命周期的一部分&#xff0c;如何将这些服务高效、可靠地部署到生产环境&#xff0c;是决定项目成败的关键一步。本章将聚焦于服务的部署&#xff0c;重点介绍…

力扣148:排序链表

力扣148:排序链表题目思路代码题目 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 思路 当我们第一眼看见这道题时心中其实是有思路的&#xff0c;我们不想这是个链表就当它是一个整型数组。那么自然而然就会想到各种各样的排序方法&#xf…

基于k8s环境下的pulsar常用命令(下)

#作者&#xff1a;Unstopabler 文章目录permissionSchemapermission pulsar的权限控制是在namespace级别的 kubectl exec pulsar-toolset-0 -n pulsar – bin/pulsar-admin namespaces grant-permission mytenant/mynamespace –actions produce,consume –role admin10 注…

2.4 组件通信

Props 和 Events&#xff08;父子组件通信&#xff09;Props&#xff1a;父组件向子组件传递数据使用 props。子组件通过声明 props 来接收来自父组件的数据。<!-- 父组件 --> <template><ChildComponent :message"parentMessage" /> </templat…

PCL学习之路-基础知识-(一)

文章目录1.西门子S7系列PLC类型划分(1).大型PLC&#xff1a;S7-400(2).中型PLC&#xff1a;S7-300(3).小型PLC&#xff1a;S7-200系列2.西门子S7外形结构(1).总览&#xff1a;PLC的“器官”分工逻辑3.输出电路(1).小型继电器输出形式(2).大功率晶体管/场效应管输出形式(3).双向…

leetcode654:最大二叉树(递归与单调栈双解法)

文章目录一、 题目描述二、 核心思路&#xff1a;分而治之与递归构造三、代码实现与深度解析四、 关键点与复杂度分析五、拓展解法单调栈解法两种解法对比LeetCode 654. 最大二叉树&#xff0c;【难度&#xff1a;中等&#xff1b;通过率&#xff1a;82.6%】&#xff0c;这道题…

Python 循环语法详解

在编程中&#xff0c;循环是一种非常常见的控制结构。很多时候&#xff0c;我们需要重复做一些事情&#xff0c;比如遍历列表、处理数据、尝试直到成功等。这时候&#xff0c;就离不开循环了。Python 提供了两种主要的循环结构&#xff1a;for 循环 和 while 循环。本篇文章会从…

一个小巧神奇的 USB数据线检测仪

一个小巧的数据线检测仪&#xff0c;检测各种USB数据线是否损坏、通断&#xff0c;TYPE_C、MICRO_B、苹果线、烧录线、网线都可检测。嵌入式开发者的称手工具。 这个是我个人制作的&#xff0c;SMT和连接器比较贵&#xff0c;特别是24PIN的C口连接器&#xff0c;我挂在黄色小鱼…

37.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--增加Github Action

在第二部分&#xff08;微服务基础工具与技术&#xff09;中我们讲解了GitHub Action的相关知识&#xff0c;那么在这一节中&#xff0c;我们将为已有的微服务增加GitHub Action的支持。 一、什么是GitHub Action 虽然前面已经介绍过GitHub Action的相关知识&#xff0c;但这里…

ROS2 通过 命令行 发布速度控制指令 控制 麦克娜姆轮

在 ROS2 中&#xff0c;要通过命令行发布速度控制指令来控制麦克娜姆轮机器人&#xff0c;你需要知道机器人所使用的速度控制话题和消息类型。通常麦克娜姆轮机器人使用geometry_msgs/Twist消息类型来接收速度指令。 以下是通过命令行发布速度控制指令的方法&#xff1a; 首先确…

多层Model更新多层ListView

一、总体架构QML (三层 ListView)└─ C 单例 DataCenter (QQmlContext 注册)├─ L1Model (一级节点)│ └─ 内部持有 QList<L2Model*>│ └─ L2Model (二级节点)│ └─ 内部持有 QList<L3Model*>│ └─ L3Model (三级节…