"clustered"在"clustered index"中的意思是什么?

7 浏览
0 Comments

"clustered"在"clustered index"中的意思是什么?

可能的重复问题:

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

聚集索引和非聚集索引实际上是什么意思?

大家好,

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

谢谢。

0
0 Comments

在“聚集索引(clustered index)”中,“聚集(clustered)”的含义是相似键值的记录在磁盘上存储在一起。因此,如果有一个只有一个整数列的键,值为“1”的记录将会被存储在值为“2”的记录旁边。如果有多个记录,比如问题ID和答案ID,那么所有属于一个特定问题的答案将会在磁盘上被分组在一起,这样可以更快地访问它们。

你可以在主键上创建一个非聚集索引;排序并不是其区别特征。

正如你所说,如果我想为一个非常大的表创建一个聚集索引,那么创建它会花费很多时间吗?因为会有很多数据重排。

但是,如果我们在创建表之后立即创建聚集索引,随后的数据插入/更新将会因为索引而延迟。这是一个两难的选择。似乎只有小规模查询可以从索引中受益。

这取决于情况;在同样的情况下,你应该考虑选择一个不可变的、单调递增的主键作为聚集索引,这样在插入和更新时就不需要重新排列。因此,你应该在向表中添加数据之前设置主键,以便能够按顺序插入。我已经在我的回答中添加了这个建议。

确实是一个选项。

个人而言,我认为日期/时间戳比自增主键更适合作为聚集索引的候选键。通常查询是在日期范围内进行的,所以这会给你带来很大的收益。维护非聚集整数索引是微不足道的,而聚集主键很少在ID是代理键时提供好处。

我同意,但一个考虑因素是聚集索引包含在所有非聚集索引中(这是它们指向聚集索引的方式),所以一个占用更多空间的聚集索引键(比如DATETIMEOFFSETINT)将会在所有非聚集索引中被乘以。如果聚集索引不是UNIQUE,SQL将会添加一个“唯一标识符”,使其变得更大,再加上另外 4 个字节。这可能会导致非常庞大的索引。进一步阅读:technet.microsoft.com/en-us/library/ms190639(v=sql.105).aspx

0
0 Comments

"clustered"在"clustered index"中的意思是物理上的记录顺序。非聚集索引仅仅是指向表中物理记录的"指针";它们按照它们的键的顺序排列,并包含键和任何包含列的数据。

考虑一本书的索引与其页码:索引包含一个按字母顺序排列的主题列表,可能还包含主题的摘要,但主题本身在引用的页码上。因此,页码将是聚集索引。

由此可见,应该选择一个不可变的、单调递增的主键作为聚集索引,这样在插入和更新时就不需要重新排列。

谢谢。所以,聚集=紧密存储。这有点类似于Windows磁盘扇区簇的概念,但并不相同。

所以,我在思考创建索引时肯定会有某种排序吧?

不,不是一样的;文件系统的簇是文件存储的最小离散单元。在这里,我们只关心逻辑排序;理论上,包含数据的磁盘页面可能在磁盘上的完全不同位置(尽管在实践中不太可能,因为性能会受到影响)。

是的,任何索引都按其键排序。

只是一些附带信息:我查了一下维基百科关于索引的相关信息,结果发现索引只是原始数据表的一个紧凑版本,提供更快的搜索体验。没有更多,也没有更少。

0