【547、聚簇索引和非聚簇索引】

25 阅读2分钟

聚簇索引和非聚簇索引是数据库索引的两种类型。

聚簇索引是按照索引列的值对整个表进行排序的一种索引结构,每张表只能有一个聚簇索引,而且聚簇索引的叶子节点存储的是整个行数据,因此聚簇索引的数据存储和索引存储是在同一颗B+树上。聚簇索引的优点是可以快速地定位到某个索引列的值对应的行数据,因为行数据本身就存储在聚簇索引的叶子节点中,适用于经常需要按照索引列的值查询行数据的场景。

非聚簇索引是在单独的B+树结构上构建的一种索引结构,每张表可以有多个非聚簇索引,而且非聚簇索引的叶子节点存储的是索引列的值和对应的主键值。因此,在使用非聚簇索引进行查询时,需要先通过二级索引找到对应的主键值,再根据主键值到聚簇索引中获取行数据。非聚簇索引的优点是可以提高查询效率,尤其是在需要查询不是聚簇索引的列的值时,可以通过非聚簇索引避免全表扫描。

需要注意的是,聚簇索引和非聚簇索引的实现方式和优缺点可能因不同的数据库管理系统而有所不同。

普通索引和联合索引都是非聚簇索引。 在 InnoDB 存储引擎中,普通索引和联合索引都是建立在表数据之外的数据结构上的,叶子节点存储的是索引值和对应的主键值或者行指针,而非聚簇索引的数据存储顺序与表数据的存储顺序没有关系,因此也不会像聚簇索引那样对表数据的存储结构产生影响。

需要注意的是,普通索引和联合索引在使用时需要注意查询语句的优化,尽可能利用索引来提高查询效率。同时,对于联合索引,需要根据查询语句的特点来选择合适的索引顺序,以达到更好的查询效果。