(面试题)聚簇索引和非聚簇索引区别?

54 阅读1分钟

等价于 聚簇索引和非聚簇索引区别 问题

首先,两者都是B+树的数据结构

聚簇索引

聚簇索引,将索引和数据存放到了一起,找到索引就能找到数据。

聚簇索引叶子节点放的是完整的记录。

1.jpg

非聚簇索引

非聚簇索引,将索引和数据分开存放,叶子节点只存放主键 或者 数据地址。

如果需要根据非聚簇索引找到完整记录,需要先找到对应的主键 或者 数据地址,然后再根据主键 或者 数据地址找到完整记录。

2.jpg

优缺点

优点:

(1)聚簇索引主键查询一次就可以获得数据,非聚簇索引在非覆盖索引下需要两次查询,所以聚簇索引效率高

(2)聚簇索引将索引和数据放到一块,因为索引是有序的,所以数据也有序。方便了范围查找和order by排序

缺点:

(1)聚簇索引维护索引代价高,调整索引同时也需要调整数据

(2)聚簇索引从逻辑上只能有一个,要么按A列排序,要么按B列排序

应用场景

  • Innodb引擎使用聚簇索引 + 非聚簇索引,一般是主键索引使用聚簇索引,其他索引使用非聚簇索引。
    比如现在对name建索引,想根据name查询age。
        过程就是先去name所在的非聚簇索引查询主键id,然后再根据主键id区聚簇索引查询age
  • MyISAM引擎使用非聚簇索引,所有的叶子节点放的是数据的内存地址