聚簇索引与非聚簇索引
一、聚簇索引
数据与索引放在一起,找到索引就找到数据
二、非聚簇索引
数据与索引存储分开
这里说的数据与索引一起还是分开指的是在btree叶子节点是否只存在索引。
使用场景
动作描述 使用聚簇索引 使用非聚簇索引
列经常被分组排序 应 应
返回某范围内的数据 应 不应
一个或极少不同值 不应 不应
小数目的不同值 应 不应
大数目的不同值 不应 应
频繁更新的列 不应 应
外键列 应 应
主键列 应 应
频繁修改索引列 不应 应
在InnoDB中,只有主键是聚簇索引,如果没有主键,创建唯一键建立聚簇索引,如果没有唯一键,就隐式生成唯一键建立聚簇索引。
聚簇索引和非聚簇索引一定要回表查询么?
聚簇索引不需要回表查询,叶子节点存放索引和数据,所以在叶子节点就能获取整行数据。
非聚簇索引,若查询语句要求的字段全部命中索引,就不用回表查询。否则需要。