等价于 聚簇索引和非聚簇索引区别 问题
首先,两者都是B+树的数据结构
聚簇索引
聚簇索引,将索引和数据存放到了一起,找到索引就能找到数据。
聚簇索引叶子节点放的是完整的记录。
非聚簇索引
非聚簇索引,将索引和数据分开存放,叶子节点只存放主键 或者 数据地址。
如果需要根据非聚簇索引找到完整记录,需要先找到对应的主键 或者 数据地址,然后再根据主键 或者 数据地址找到完整记录。
优缺点
优点:
(1)聚簇索引主键查询一次就可以获得数据,非聚簇索引在非覆盖索引下需要两次查询,所以聚簇索引效率高
(2)聚簇索引将索引和数据放到一块,因为索引是有序的,所以数据也有序。方便了范围查找和order by排序
缺点:
(1)聚簇索引维护索引代价高,调整索引同时也需要调整数据
(2)聚簇索引从逻辑上只能有一个,要么按A列排序,要么按B列排序
应用场景
- Innodb引擎使用聚簇索引 + 非聚簇索引,一般是主键索引使用聚簇索引,其他索引使用非聚簇索引。
比如现在对name建索引,想根据name查询age。
过程就是先去name所在的非聚簇索引查询主键id,然后再根据主键id区聚簇索引查询age
- MyISAM引擎使用非聚簇索引,所有的叶子节点放的是数据的内存地址