What does “clustered” mean in “clustered index”?
Possible Duplicates:
Difference between clustered and nonclustered index
What do Clustered and Non clustered index actually mean?
号
嗨,专家们,
"聚集索引"中的"聚集"一词是什么意思?我怀疑这与磁盘扇区的使用有关。因为我隐约记得Windows将磁盘空间组织成由一个或多个512字节扇区组成的集群。这两个概念有什么联系吗?
谢谢。
- 看看stackoverflow.com/questions/1251636/…
- 在我看来,他/她是在问为什么它被称为集群(即为什么它是那样命名的)而不是它是什么。
- @菲尔·桑德勒,是的,你说得对。我真的想知道命名的原因。
- @smwikipedia我也有同样的问题,最接近的答案是"聚集索引就是聚集实际数据(而不是在没有聚集索引的情况下仅仅聚集索引键)"。原始答案在这里
- @rgudkov谢谢。
聚集索引表示磁盘上记录的物理顺序。非聚集索引只是指向表中物理记录的"指针";它们按键的顺序排列,并包含键的数据和任何包含的列。
考虑一本书的索引和它的页码:索引包含按字母顺序排列的主题列表,也许它包含主题的摘要,但是主题本身在引用的页面上。那么,页码就是聚集索引。
因此,您应该考虑为聚集索引选择一个不变的、单调递增的主键,以便在插入和更新时不需要重新排列内容。
- 谢谢。所以,cluster=store close。这类似于Windows磁盘扇区群集的概念,但并不相同。
- 所以,我想在创建索引时一定有某种排序?
- 不,它是不同的;文件系统集群是文件存储的量子(最小的离散单元)。在这里,我们只关心逻辑排序;理论上,包含数据的磁盘页面可能在磁盘上的不同位置(尽管在实践中不太可能,因为性能会受到影响)。
- 是的,任何索引都按其键排序。
- 除此之外:我查看了维基百科的索引相关信息,结果发现索引只是原始数据表的一个紧凑版本,它提供了更快的搜索体验。不多不少。
群集意味着具有相似键的记录存储在磁盘上(大多数情况下)彼此相邻。因此,如果一个键只有一个整型列,那么值为"1"的记录将位于值为"2"的记录旁边。如果您有多个记录,例如questionid和answerid,那么属于某个特定问题的所有答案都将被分组到磁盘上,这样访问它们就更快了。
- 您可以在主键上有一个非聚集索引;排序不是区别的特征。
- 如您所说,如果我想为一个非常大的表创建一个聚集索引,那么创建它会花费很多时间吗?因为会有很多数据重新排列。
- 但是,如果我们在创建表之后立即创建聚集索引。以下数据插入/更新将因索引而延迟。这是一个两难境地。似乎只有小剂量的查询可以从索引中受益。
- 取决于;同样,您应该考虑为聚集索引选择一个不变的、单调递增的主键,这样在插入和更新时就不需要重新排列。因此,在向表中添加数据之前,您可能应该设置主键,以便按顺序插入数据。我在回答中加了这个建议。
- 这的确是一个选择。
- 就我个人而言,我发现日期/时间戳比标识pk更适合作为聚集索引候选。查询通常在日期范围之间,因此这会给您带来巨大的成功。非聚集整数索引的维护很简单,当ID是代理时,聚集pk很少提供好处。
- 我同意,但有一个考虑是聚集索引包含在所有非聚集索引中(这就是它们指向CI的方式),因此占用更多空间的聚集索引键(例如,DATETIMEOFFSET与INT)将乘以所有非聚集索引。如果聚集索引不是UNIQUE,SQL将添加一个"uniqueifier",使其再大4个字节。这真的可以加起来。进一步阅读:technet.microsoft.com/en-us/library/ms190639(v=sql.105).aspx