什么是聚集索引?


15

我需要对聚集索引的简短说明。

  • 什么是聚集索引?
  • 使用聚簇索引的最佳实践是什么?

在聚集索引中使用日期是个好主意,因为新数据总是附加在表的末尾。
拉尔夫·温特斯

1
可能,但并非总是如此。
mrdenny

@mrdenny-您能详细说明何时不是吗?
拉尔夫·温特斯

1
如果输入的行无序。如果表更典型地将由主键查询。如果主键是INT(或更小),并且表上会有很多非聚集索引,则日期时间聚集键会更大,效率更低。如果date列永远不会查询该表,那么使用聚簇键是不值得的,因为仅会使用非聚簇索引。
mrdenny

@mrdenny:此外,如果表中有没有日期栏(你的最后一个子集的情况下:)
ypercubeᵀᴹ

Answers:


15

简单来说...

电话簿:数据是索引/索引是数据。为了查找您,我将以Rezaei为例,例如Amir。无需外部查找。

用数据库术语:

表数据和聚集索引是相同的(在SQL Server,InnoDB,Oracle IOT中)

最佳做法是狭窄,数字,严格增加(请考虑“身份”或“自动编号”列)。像GUID这样的数据类型不是一个好主意

阅读链接(避免夸大此答案)

编辑以充分解释我的最佳实践建议,请遵循Eric Humphrey评论中的链接:索引女王:金伯利·特里普



1
这就存在在没有上下文的情况下应用“最佳实践”的问题。例如,如果一个频繁搜索的大型表的主搜索条件是日期范围,则聚集索引的最佳位置是要搜索的日期而不是主键。要说表和聚簇索引是一个并且相同,这有点过于简单了。数据实际上按照聚簇索引指示的顺序存储。除其他外,这意味着聚簇索引对于返回完整数据集的范围搜索特别有用。
Russell Steen

2
@Russell Steen:1.我包括了链接2. OP必须询问,考虑一下我在哪个级别上给出了这个答案3. Eric Humphrey提供了一个create链接。我们可以逐个案例地介绍我们经验丰富的人所了解和理解的内容,但是我们是在这里帮助教育或压倒一切吗?
gbn

我听到你在说什么。问题不在于您本身的答案,而是事实上,经验不足的人比您自己跑来跑去报价和应用某些东西,因为这是“最佳实践”,而没有理解最佳实践的用途和内容–我会认为是的,我们是来这里进行培训的,并且引用最佳实践而不直接在帖子中提供更多上下文并不能起到很好的作用。
罗素Steen

2
哦,只是注意到了SQL-Server标签,无视了。
–ypercubeᵀᴹ2012年

3

它是数据本身的索引,这样就可以根据您拥有聚簇索引的字段对记录进行物理排序。这就是每个表只能有一个聚集索引的原因。

非聚集索引的查找速度并不快,但是表上可以具有许多此类索引。


3
如果非聚簇索引涵盖了所涉及的查找,则非聚簇索引对于查找同样有效。
罗素Steen

@Russell由于索引强制了数据的实际排序顺序,因此它不可能更快。SQL或任何RDBMS找不到更简单/更快的方法来查找所需的信息。
kacalapy 2011年

4
我没说快。覆盖索引具有在索引中的选择中请求的所有数据-IN ORDER,位于磁盘的单独位置上。因此,针对匹配覆盖索引的选择永远不会成功。
罗素Steen

2
NCI的覆盖范围可能会更小,这意味着更少的页面阅读和更快的速度。
马丁·史密斯

在表上仅具有一个聚集索引的原因不是物理排序,索引页始终按逻辑排序,并且不能保证页面的连续分配。每个表只能有一个聚集索引,因为聚集索引是表本身,而非聚集索引是具有必需列的表的副本。
Manoj Pandey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.