聚簇索引与非聚簇索引

2021.01.20 03:01 38
阅读约 4 分钟

理解索引结构

把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。

一句话总结:

聚集还是非聚集的区别是B+Tree叶结点存的是指针还是数据记录

聚集索引

聚集索引定义了表中数据的储存顺序。表数据按照某种方式排列,因此,每个表只能有一个聚集索引。在SQL Server中,创建主键约束会自动在该特定列上创建聚簇索引。

聚集索引的概念可以这样理解,假如我们有一本不包含目录字典。如果我们需要查询一个"矮"字,可以通过直接从“a”字母开头的页码开始查起。这种情况就相当于:

所查询内容本身就是一种按照一定规则排列的目录称为聚集索引

从数据结构角度出发,在B+树的叶子节点处既储存主键,也储存着数据表的内容,如叶结点15, 存储主键34和数据Bob。

非聚集索引

非聚集索引不会对表内的物理数据进行排序。实际上,非聚集索引与聚集索引的储存位置是不同的。就像一本字典,目录在一个位置,内容在另一个位置,每个表允许一个以上的非聚集索引。

目录纯粹是目录,正文纯粹是正文的排序方式称为非聚集索引

如下图所示,在B+树的叶子节点处,储存的是数据文件的指针,叶子节点就是目录,而储存的数据文件就相当于正文。

结论

聚簇索引和非聚簇索引之间存在以下差异。

  1. 每个表只能有一个聚集索引。但是,您可以在单个表上创建多个非聚集索引。
  2. 聚集索引仅对表进行排序。因此,它们不会消耗额外的存储空间。非聚集索引存储在与实际表不同的位置,从而占用更多存储空间。
  3. 聚簇索引比非聚簇索引要快,因为它们不涉及任何额外的查找步骤。

何时使用聚集索引和非聚集索引

下表总结了何时使用聚集索引或非聚集索引。

动作描述 使用聚集索引  使用非聚集索引  
列经常被分组排序 应该应该
返回某范围内的数据 应该不应该
一个或极少不同值不应该不应该
小数目的不同值 应该不应该
大数目的不同值不应该应该
频繁更新的列不应该应该
外键列应该应该
主键列 应该应该
频繁修改索引列不应该应该

           

 

字数:861 发布于 1 个月前
Copyright 2018-2021 Siques