聚集索引和非聚集索引之间的区别

聚簇索引与非聚簇索引的关键区别

  • 聚簇索引是一种索引,它根据键值对表中的数据行进行排序,而非聚簇索引将数据存储在一个位置,而索引存储在另一个位置。
  • 聚簇索引在索引的叶节点中存储数据页,而非聚簇索引方法从不将数据页存储在索引的叶节点中。
  • 聚簇索引不需要额外的磁盘空间,而非聚簇索引需要额外的磁盘空间。
  • 聚簇索引提供更快速的数据访问,而另一方面,非聚簇索引速度较慢。
Difference between Clustered and Non-clustered Index
聚簇索引与非聚簇索引

什么是索引?

索引是数据库中基于一列或多列创建的键,可以加快从表或视图中检索行的速度。此键有助于 Oracle、SQL Server、MySQL 等数据库快速查找与键值关联的行。

有两种类型的索引:

  • 聚簇索引
  • 非聚簇索引

什么是聚簇索引?

聚簇索引是一种根据键值对表中的数据行进行排序的索引。在数据库中,每个表只有一个聚簇索引。

聚簇索引定义了表中数据的存储顺序,该顺序只能按一种方式排序。因此,每个表只能有一个聚簇索引。在 RDBMS 中,通常主键允许您基于该特定列创建聚簇索引。

什么是堆栈索引?

非聚簇索引将数据存储在一个位置,而索引存储在另一个位置。索引包含指向该数据位置的指针。一个表可以有许多非聚簇索引,因为非聚簇索引中的索引存储在不同的位置。

例如,一本书可以有多个索引,一个在开头,按单元显示书的内容,而第二个索引按字母顺序列出术语的索引。
非聚簇索引在表的非排序字段中定义。这种索引方法有助于提高使用非主键的查询的性能。非聚簇索引允许您为主表添加唯一键。

聚簇索引的特征

  • 默认和排序的数据存储
  • 为索引使用一列或多列
  • 帮助您将数据和索引存储在一起
  • 碎片整理
  • 操作
  • 聚簇索引扫描和索引查找
  • 键查找

非聚簇索引的特征

  • 仅存储键值
  • 指向堆/聚簇索引行的指针
  • 允许二级数据访问
  • 数据桥梁
  • 索引扫描和索引查找操作
  • 您可以为表或视图创建非聚簇索引
  • 非聚簇索引中的每个索引行都存储非聚簇键值和一个行定位符

SQL 中的聚簇索引与非聚簇索引:关键区别

参数 聚簇 非聚簇
用途 您可以对记录进行排序,并将聚簇索引物理地存储在内存中,以匹配顺序。 非聚簇索引可以帮助您为数据行创建逻辑顺序,并使用指针指向物理数据文件。
存储方法 允许您将数据页存储在索引的叶节点中。 这种索引方法从不将数据页存储在索引的叶节点中。
大小 聚簇索引的大小相当大。 与聚簇索引相比,非聚簇索引的大小较小。
数据访问 更快 与聚簇索引相比速度较慢
额外的磁盘空间 不需要 需要单独存储索引
键类型 默认情况下,表的主键是聚簇索引。 它可以与表上的唯一约束一起使用,充当复合键。
主要特点 聚簇索引可以提高数据检索的性能。 应在用作连接的列上创建。

聚簇索引的示例

在下面的示例中,SalesOrderDetailID 是聚簇索引。检索数据的示例查询

SELECT CarrierTrackingNumber, UnitPrice
FROM SalesData
WHERE SalesOrderDetailID = 6

Example of a clustered index

非聚簇索引的示例

在下面的示例中,在 OrderQty 和 ProductID 上创建了一个非聚簇索引,如下所示

CREATE INDEX myIndex ON
SalesData (ProductID, OrderQty)

Example of a non-clustered index

与聚簇索引相比,以下查询将检索得更快。

SELECT Product ID, OrderQty
FROM SalesData
WHERE ProductID = 714

Example of a non-clustered index

聚簇索引的优点

聚簇索引的优点/好处是:

  • 聚簇索引是范围查询或 GROUP BY(带 MAX、MIN、COUNT 等类型)查询的理想选择
  • 在这种索引中,搜索可以直接定位到数据的特定点,然后您可以从那里开始顺序读取。
  • 聚簇索引方法使用位置机制来定位范围开头的索引条目。
  • 当请求范围内的搜索键值时,这是一种有效的范围搜索方法。
  • 有助于最小化页面传输并最大化缓存命中。

非聚簇索引的优点

使用非聚簇索引的优点是:

  • 非聚簇索引可以帮助您快速从数据库表中检索数据。
  • 有助于避免与聚簇索引相关的开销
  • 表可能在 RDBMS 中有多个非聚簇索引。因此,它可用于创建多个索引。

聚簇索引的缺点

以下是使用聚簇索引的缺点/劣势:

  • 大量按非顺序插入
  • 聚簇索引会产生大量连续的页面拆分,包括数据页和索引页。
  • SQL 的插入、更新和删除需要额外工作。
  • 当聚簇索引中的字段发生更改时,聚簇索引更新记录所需的时间更长。
  • 聚簇索引的叶节点大多包含数据页。

非聚簇索引的缺点

以下是使用非聚簇索引的缺点/劣势:

  • 非聚簇索引有助于按逻辑顺序存储数据,但不允许物理排序数据行。
  • 非聚簇索引的查找过程成本很高。
  • 每次群集键更新时,都需要在非群集索引上进行相应的更新,因为它存储了群集键。