欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
全部教程·
数据库·
MySQL
[目录]
·
MySQL 主键索引
MySQL 教程
MySQL 安装
MySQL 管理
MySQL 连接
MySQL 创建数据库
MySQL 删除数据库
MySQL 选择数据库
MySQL 数据类型
MySQL 创建表
MySQL 删除表
MySQL INSERT 语句
MySQL SELECT 语句
MySQL WHERE 子句
MySQL UPDATE 语句
MySQL DELETE 语句
MySQL LIKE 子句
MySQL UNION 操作符
MySQL ORDER BY 子句
MySQL GROUP BY 语句
MySQL JOIN 语句
MySQL NULL 值处理
MySQL 正则表达式
MySQL 事务
MySQL ALTER 命令
MySQL INDEX 索引
MySQL 临时表
MySQL 复制表
MySQL 自增字段
MySQL 处理重复数据
MySQL 导出数据
MySQL 导入数据
MySQL 内置函数
MySQL 运算符
MYSQL 高级教程
MYSQL 聚簇索引 MySQL 主键索引 MySQL 索引覆盖 MySQL 存储引擎 MySQL 慢查询日志
MySQL 教程
MySQL 安装
MySQL 管理
MySQL 连接
MySQL 创建数据库
MySQL 删除数据库
MySQL 选择数据库
MySQL 数据类型
MySQL 创建表
MySQL 删除表
MySQL INSERT 语句
MySQL SELECT 语句
MySQL WHERE 子句
MySQL UPDATE 语句
MySQL DELETE 语句
MySQL LIKE 子句
MySQL UNION 操作符
MySQL ORDER BY 子句
MySQL GROUP BY 语句
MySQL JOIN 语句
MySQL NULL 值处理
MySQL 正则表达式
MySQL 事务
MySQL ALTER 命令
MySQL INDEX 索引
MySQL 临时表
MySQL 复制表
MySQL 自增字段
MySQL 处理重复数据
MySQL 导出数据
MySQL 导入数据
MySQL 内置函数
MySQL 运算符
MYSQL 高级教程
MYSQL 聚簇索引 MySQL 主键索引 MySQL 索引覆盖 MySQL 存储引擎 MySQL 慢查询日志MySQL 主键索引和聚簇索引的区别
1. 主键索引和聚簇索引的区别
MySQL 聚簇索引的叶子节点就是数据节点,主键索引就是聚簇索引吗?答案是否定的。
在 MySQL 数据库 innodb 引擎里面,主键索引确实就是聚簇索引。但是 myisam 引擎里面主键索引并不是聚簇索引。
2. 聚簇索引生成规则
对于 Innodb,主键毫无疑问是一个聚簇索引。但是当一个表没有主键,或者没有一个索引,Innodb 会如何处理呢?
- 1. 如果一个主键被定义了,那么这个主键就是作为聚簇索引。
- 2. 如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚簇索引。
- 3. 如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚簇索引,这个隐藏的主键是一个6个字节的列,改列的值会随着数据的插入自增。
- 4.自增主键会把数据自动向后插入,避免了插入过程中的聚簇索引排序问题。
聚簇索引的排序,必然会带来大范围的数据的物理移动,这里面带来的磁盘 IO 性能损耗是非常大的。 而如果聚簇索引上的值可以改动的话,那么也会触发物理磁盘上的移动,于是就可能出现 page 分裂,表碎片横生。所以不应该修改聚簇索引。
下一章:MySQL 回表查询和索引覆盖
什么是回表查询和索引覆盖?如何实现索引覆盖?哪些场景,可以利用索引覆盖来优化SQL?测试数据库表结构:create table user ( id int primary key, name varcha ...
AI 中文社