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

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

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

1. 从不同存储引擎去考虑
  1. 在MySIAM存储引擎中,索引和数据是分开存储的,包括主键索引在内的所有索引都是“非聚簇”的,每个索引的叶子节点存储的是数据记录的物理地址(指针),而不是数据本身
  2. 而在InnoDB存储引擎中,InnoDB 的主键索引是聚簇索引,叶子节点直接包含完整数据记录
2. 从InnoDB内部去考虑
  1. 聚簇索引
    1. 索引叶子结点存储的是数据行,可以直接访问完整数据
    2. 每个表只能有一个聚簇索引,通常是主键索引,适合范围查询和排序
  2. 非聚簇索引
    1. 索引的叶子结点存储的是主键和对应的索引列,而不是完整数据,如需访问完整数据需要根据主键回表查询
    2. 一个表可以有多个非聚簇索引,适用于快速查找对应的列数据

注意,主键索引和聚簇索引的区别,他们并不相等!

  1. 主键优先
    • 如果表定义了PRIMARY KEY,则自动使用主键作为聚簇索引
  1. 无主键时的选择
    • 如果没有主键,InnoDB会选择第一个所有列都是NOT NULL的UNIQUE索引作为聚簇索引
    • 如果既没有主键也没有符合条件的UNIQUE索引,InnoDB会内部生成一个隐藏的6字节列(DB_ROW_ID)作为聚簇索引

相关文章:

  • Redis的过期和内存淘汰策略
  • 新技术学习方法
  • 卷积神经网络 CNN 系列总结(一)---基础知识点
  • ubuntu22.04 安装-ODBC驱动-SQLserver
  • vue中根据html动态渲染内容2.0
  • 无人设备遥控器之数据分析与处理篇
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据读取
  • ------------------V2024-2信息收集完结------------------
  • Linux 入门五:Makefile—— 从手动编译到工程自动化的蜕变
  • 使用开源项目蜂信物联/FastBee前端安装失败
  • Python进阶编程总结
  • vue项目proxy代理的方式
  • DeepSeek与搜索引擎:AI生成内容如何突破“语义天花板”
  • 【前端】VUE前端利用iframe嵌入帆软报表
  • 【Python算法】基础语法、算法技巧模板、二分、DFS与BFS、并查集
  • V4L2杂谈
  • 【U-Boot】解决U-Boot的“Unknown command ‘help‘ - try ‘help‘”问题
  • 等保十问/等保相关基本问题解答
  • git日志规范
  • FastAPI + Vue3 对 SSE 通知机制的实现与进阶思考
  • 宗亲网站开发6/互联网营销师是做什么的
  • 廊坊永清网站建设/推广渠道
  • 传媒建站推荐/网络搜索引擎优化
  • 如何快速自己做网站/东莞网络优化公司
  • 网站做海外的防护/百度域名购买
  • 盐城网站建设厂商/360网站推广官网