聚集索引和非聚集索引有什么区别?

307

聚集索引非聚集索引有什么区别?


8
每个表只能有一个聚集索引,但还有许多其他区别... - Tom Robinson
5
聚集索引实际上描述记录在磁盘上物理存储的顺序,这就是为什么只能有一个的原因。非聚集索引定义的是逻辑顺序,而不是磁盘上的物理顺序。 - Josh
1
集群化基本上意味着数据在表中以物理顺序排列。这就是为什么每个表只能有一个的原因。非集群化意味着它只是“逻辑顺序”。 - Biri
2
@biri 什么是“逻辑”顺序?非聚集索引在物理上按顺序存储索引键,并将指针存储到表中,即聚集索引键。 - Stephanie Page
@Stephanie Page:从表的角度来看是逻辑上的。当然,非聚集索引在索引本身中是按物理顺序排序的。 - Biri
显示剩余2条评论
13个回答

4
你可能已经通过上面的帖子了解到了理论部分:
- 如我们所见,聚集索引直接指向记录,即它是直接的,因此搜索时间较短。另外,它不需要额外的内存/空间来存储索引。 - 而在非聚集索引中,它间接地指向聚集索引,然后访问实际记录,由于其间接性质,它需要更长时间才能访问。此外,它还需要自己的内存/空间来存储索引。

enter image description here


0

// 这段内容来自 MSDN,其他答案中没有明确提到非聚集索引的第二点。

聚集

  • 聚集索引根据其键值对表或视图中的数据行进行排序和存储。这些列包括在索引定义中。每个表只能有一个聚集索引,因为数据行本身只能按一种顺序存储。
  • 当表包含聚集索引时,表中的数据行仅在排序顺序下存储。当表没有聚集索引时,其数据行以无序结构(堆)存储。

非聚集

  • 非聚集索引与数据行结构分离。非聚集索引包含非聚集索引键值,每个键值条目都有一个指向包含该键值的数据行的指针。
  • 从非聚集索引中的索引行到数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。

0

聚集索引

  • 聚集索引检索速度快,插入和更新速度慢。
  • 一张表只能有一个聚集索引。
  • 不需要额外的空间来存储逻辑结构。
  • 决定了数据在磁盘上存储的顺序。

非聚集索引

  • 非聚集索引检索数据速度较慢,插入和更新速度较快。

  • 一张表可以有多个非聚集索引。

  • 需要额外的空间来存储逻辑结构。

  • 对于数据在磁盘上存储的顺序没有影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接