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

聚簇索引和非聚簇索引的定义和区别

1.聚簇索引:

也叫聚集索引、主键索引,是将索引和数据放在一起,聚簇索引的 B+Tree 的叶子节点存放的是实际数据,所有完整的用户记录都存放在主键索引的 B+Tree 的叶子节点里;找到索引也就找到了数据。数据行的物理顺序与列值(一般是主键的顺序)的逻辑顺序相同,一个表只能有一个聚簇索引。

2.非聚簇索引:

是指二级索引,也叫非聚集索引、辅助索引。通过非聚簇索引可以查到记录对应的主键值,再使用主键的值通过聚簇索引找到要查找的数据。索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表可以有多个非聚簇索引。

Innodb中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,辅助索引叶子节点存储的不再是行的物理位置,而是主键值。

聚簇索引将数据行按照索引列的值顺序存储在同一个页或连续的页面上,适合范围查询和顺序访问操作。

非聚簇索引将索引和数据行分开存储,通过指针来定位数据行,适合查询和更新操作较多的场景。

3.区别:

聚簇索引和非聚簇索引主要有以下区别:

1.数据存储方式:

聚簇索引:表数据按照索引的顺序来存储。即索引的叶子节点包含了完整的数据行。

非聚簇索引:索引和数据是分开存储的,索引的叶子节点存储的是指向数据行的指针。

2.主键与索引关系:

聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。InnoDB 只聚集在同一个页面中的记录。包含相邻键值的页面可能相距甚远。如果你已经设置了主键为聚簇索引,必须先删除主键,然后添加我们想要的聚簇索引,最后恢复设置主键即可。

非聚簇索引可以在表的任何列上创建,不限于主键。

3.数据查找效率:

对于主键的查询,聚簇索引查找速度更快,因为直接可以获取到数据。

非聚簇索引需要先通过索引找到指针,再根据指针去查找数据,多了一次查找过程。

4.范围查询性能:

聚簇索引在范围查询时性能较好,因为数据在物理上是连续存储的。

非聚簇索引在范围查询时可能效率相对较低。

5.插入和删除操作影响:

聚簇索引在插入和删除数据时,可能会导致数据的移动,影响性能。

非聚簇索引相对来说对插入和删除操作的影响较小。


http://www.mrgr.cn/news/33828.html

相关文章:

  • 数学建模模型算法-Python实现
  • 脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾
  • rust模式和匹配
  • D3入门:概念、主要特点、基本功能、常见应用场景
  • PHP反序列化靶场(php-SER-libs-main 第一部分)
  • 1.3 10S命令行模式
  • Codeforces Round 974 (Div. 3) G. Milky Days
  • 布草洗涤-酒店分楼层统计报表--———未来之窗行业应用跨平台架构
  • 中小企业体系技术抽象沉淀-异地灾备篇
  • Linux:环境变量
  • 【9月22日小雪】A股下周趋势分析
  • 自然语言处理NLP:文本预处理Text Pre-Processing
  • 【Python报错已解决】TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘
  • 浅谈Linux中文件与目录的ACL
  • python函数的一些介绍
  • C++——将数组a[5]={-1,2,9,-5,7}中小于0的元素置成0。并将其结果输出(要求:用数组名作为函数的参数来实现)
  • Python爬虫之urllib模块详解
  • 双向链表:实现、操作与分析【算法 17】
  • 传输层 II(TCP协议——协议的特点、报文段、连接管理)【★★★★】
  • cnn机器学习时python版本不兼容报错
  • tb的数数问题(牛客小白月赛)
  • 算法打卡:第十一章 图论part04
  • “Boolean yes=TRUE;“是正确的boolean变量声明???
  • 干货 | 2024数智新时代制造业数字化创新实践白皮书(免费下载)
  • 制造解法 Manufactured Solutions 相关的论文的阅读笔记
  • linux-----进程控制