MYSQL笔记-簇
1 简单释义
簇是一种数据的物理存储方式,把具有某种关系的数据行保存在一起,从而提高查询效率
2 聚簇与非聚簇
类型 | 特点 | 举例 |
---|---|---|
聚簇索引(Clustered Index) | 数据行与主键索引一起存储(索引即数据) | 主键索引就是聚簇索引 |
非聚簇索引(Secondary Index) | 索引保存主键的引用,需要回表查询数据 | 普通的二级索引 |
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
-- 在InnoDB中,id是主键,因此表会按照id的顺序物理排序存储这条数据,这就形成了一个聚簇索引
-- 如果给email添加索引,就会形成一个非聚簇索引,它只包含email+主键id,需要根据id再回表查name
3 簇的性能影响
- 优点
- 提高基于聚簇字段的范围查询、排序的效率
- 相关数据被物理的存储在一起,可以减少I/O操作
- 缺点
- 插入、更新代价高、可能导致页分裂(尤其是非递增主键的情况)
- 每个表只能有一个聚簇索引
4 个人白话理解
- 簇是一种优化数据存储的方式
- MySQL的InnoDB引擎默认使用主键聚簇索引,每个表的数据都以主键的顺序存储在磁盘上
- 每个表只能有一个聚簇索引,一般是主键,如果没有主键,则会选用唯一非空索引;再没有就自动生成隐藏的row_id
- 表的数据行会与主键索引放在一起,形成聚簇结构,因此查询时,聚簇索引可以直接拿到对应数据,而非聚簇索引存储的是索引列值+主键,要回表查询才能拿到完整数据