【问题标题】:What does "clustered" mean in "clustered index"? [duplicate]“聚集索引”中的“聚集”是什么意思? [复制]
【发布时间】:2011-07-12 09:34:51
【问题描述】:

可能的重复:
Difference between clustered and nonclustered index
What do Clustered and Non clustered index actually mean?

各位专家,

聚集索引”中的“聚集”一词是什么意思?我怀疑它与磁盘扇区的使用有关。因为我依稀记得Windows将磁盘空间组织成clusters,由一个或多个512字节sectors组成>。这两个概念有什么联系吗?

谢谢。

【问题讨论】:

  • 在我看来,他/她在问为什么它被 CALLED 集群(即为什么它以这种方式命名)而不是它是什么。
  • @Phil Sandler,是的,你是对的。我真的很想知道命名的原因。
  • @smwikipedia 我有同样的问题,最接近的答案是“聚集索引正在聚集实际数据(而不是在非聚集索引的情况下只是索引键)”。原始答案是here

标签: sql sql-server


【解决方案1】:

聚集索引表示磁盘上记录的物理顺序。非聚集索引只是表中物理记录的“指针”;它们按其键的顺序排列,并包含其键的数据和任何包含的列。

考虑一本书的索引与它的页码:索引包含按字母顺序排列的主题列表,也许它包含主题的摘要,但主题本身在引用的页面上。那么,页码就是聚集索引。

因此,您应该考虑为聚集索引选择一个不可变的、单调递增的主键,以便在插入和更新时不需要重新排列。

【讨论】:

  • 谢谢。所以,cluster = store close。这有点类似于 windows 磁盘扇区集群 的概念,但又不一样。
  • 那么,我认为在创建索引时必须进行某种排序?
  • 不,不一样;文件系统集群是文件存储的一个量子(最小离散单元)。这里我们只关心逻辑顺序;从理论上讲,包含数据的磁盘页面可能位于磁盘上非常不同的位置(尽管实际上不太可能,因为性能会受到影响)。
  • 是的,任何索引都按其键排序。
  • 顺便说一句:我查看了维基百科的索引相关信息,结果发现索引只不过是原始数据表的 compact 版本,可提供更快的搜索体验。不多也不少。
【解决方案2】:

集群意味着具有相似键的记录(大部分)彼此相邻存储在磁盘上。因此,如果您有一个只有 1 个整数列的键,则值为“1”的记录将位于值为“2”的记录旁边。如果您有多个记录,例如 questionid 和 answerid,则属于特定问题的所有答案都将在磁盘上组合在一起,从而可以更快地访问它们。

【讨论】:

  • 你可以在主键上有一个非聚集索引;排序不是显着特征。
  • 如你所说,如果我想为一个非常大的表创建一个聚集索引,创建它会花费很多时间吗?因为会有相当多的数据重排。
  • 但是如果我们在创建表后立即创建聚集索引。由于索引,以下数据插入/更新将延迟。这是一个两难的选择。似乎只有小剂量查询才能从索引中受益。
  • 视情况而定;同样,您应该考虑为聚集索引选择一个不可变的、单调递增的主键,以便在插入和更新时不需要重新排列。因此,您可能应该在将数据添加到表之前设置主键,以便可以按顺序插入。我已将此建议添加到我的答案中。
  • 就我个人而言,我发现日期/时间戳是比身份 PK 更好的聚集索引候选者。查询通常在日期范围之间,因此这会给您带来巨大的胜利。非聚集整数索引的维护是微不足道的,并且当 ID 是代理项时,聚集 PK 很少提供好处。
猜你喜欢
  • 1970-01-01
  • 2010-11-18
  • 2011-05-21
  • 2010-09-10
  • 2012-12-21
相关资源
最近更新 更多