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

一篇文章讲清楚mysql的聚簇索引、非聚簇索引、辅助索引

聚簇索引与非聚簇索引最大的区别就是:

聚簇索引的索引和数据是存放在一起的,都是在叶子结点;

非聚簇索引的索引和数据是分开存储的,叶子节点存放的是索引和指向数据文件的地址,通过叶子节点找到索引,再通过索引找到地址,再通过地址指向数据文件具体的数据。当然叶子节点有可能存放的是索引和主键,比如辅助索引。

这就是他们的本质区别。

聚簇索引与非聚簇索引的比较?

聚簇索引由于索引与数据是存放在一起的,所以不用回表,比非聚簇索引减少一次磁盘IO,

聚簇索引如果索引列上的值发生改变的时候,不仅要重新维护索引在树中的有序关系,而且聚簇索引的叶子节点存放了索引和数据,所以数据也需要修改。而非聚簇索引叶子结点是没有存放数据的,只需要维护索引在树中的位置,开销相比较没那么大。所以主键一般不能被修改。

非聚簇索引的结构:

可以看到索引和数据是分开存储的。(这种叶子结点存放的是索引和地址,下面会说辅助索引,叶子节点存放的是索引和主键)

聚簇索引:

索引和数据是存储在一起的。

辅助索引其实就是普通字段上建立的索引,比如name字段建立的索引。

辅助索引的结构是属于非聚簇索引结构,叶子节点存放的是索引和对应的主键id

辅助索引在查找数据的时候不一定就要回表,如果是覆盖索引的话那么就不需要回表操作了。

说到覆盖索引,那么我们顺便普及一下覆盖索引是什么?

覆盖索引就是建立的索引包含或者覆盖查询的字段。

查询的时候select的字段也是索引字段,那么在找到索引之后直接读出来就可以了,就不用回表查询了,但是如果select的字段有其他额外的字段,那么就必须回表操作了。

http://www.xdnf.cn/news/4977.html

相关文章:

  • BGA底部填充胶固化异常延迟或不固化原因分析及解决方案
  • 垃圾回收的三色标记算法
  • <el-cascader中多选多层级点击节点也选中
  • Harmonyos-属性修改器和更新器
  • 低代码云MES、轻量级部署、让智造更简单
  • 探索大语言模型(LLM):词袋法(Bag of Words)原理与实现
  • 参考文献怎么对齐操作
  • Python 基础知识
  • 网络流量分析 | Snort
  • LeetCode 216.组合总和 III:回溯算法实现与剪枝优化
  • SpringBoot快速入门WebSocket(​​JSR-356附Demo源码)
  • 为何Google广告频繁拒登?常见原因与解决方法
  • 图表制作-折线图堆叠
  • 允许别的电脑连接我电脑wsl下5001、5002端口
  • 枚举 · 例13-【模板】双指针
  • 《Scala基础》
  • DeepSeek 赋能金融:从智能分析到高效服务的全链路革新
  • WHAT - react-query(TanStack Query) vs swr 请求
  • VUE——自定义指令
  • LabVIEW 2019 与 NI VISA 20.0 安装及报错处理
  • IEEE PRMVAI Workshop 17 | 智能医疗数据分析与应用
  • Baklib云中台赋能企业内容智管
  • Kubernetes外部访问服务全攻略:生产级方案详解
  • 12.hbase 源码构建
  • PFC(Power Factor Correction)功率因数校正电路
  • 金蝶api对接沙箱环境python代码调试
  • SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(一)
  • 【Bluedroid】蓝牙 SDP(服务发现协议)模块代码解析与流程梳理
  • linux动态占用cpu脚本、根据阈值增加占用或取消占用cpu的脚本、自动检测占用脚本状态、3脚本联合套用。
  • java使用MinIO,虚拟机时间异常