索引性能,聚簇与非聚簇

时间:2014-06-28 16:20:28

标签: sql-server database optimization indexing

如果一个表只需要1个索引,那么看起来群集通常是要走的路。它更快,因为它不必通过密钥引用数据,并且它也不像非聚集索引那样占用磁盘空间。

我的问题是多个索引,最好一起删除聚簇索引吗?这背后的逻辑是,如果您有非聚集索引和聚簇索引,它们不再直接引用回实际数据行,而是转向聚簇索引。因此,使用聚簇索引作为代理似乎会对性能造成重大影响。如果您认为表中需要多于1个索引,那么最好不要使用聚簇索引。

1 个答案:

答案 0 :(得分:0)

如果表格具有正确的聚集索引,则删除它没有任何好处 如果你有几个索引,那么选择最佳的聚类候选者 通常它是你的PK 默认情况下,当您创建PK时,它会聚集 PK是群集的最佳候选者,除非您有特殊原因不使用它。

我不遵循你的断言。

  

"如果你有非聚集索引和聚集索引,他们就不会   再引用实际数据行,但返回到聚簇索引   代替。所以似乎会有一个重要的表现   命中#34;

如果聚簇索引在数据中,那么引用聚簇索引就是指数据。数据由聚簇索引物理组织。重要的性能在哪里受到影响?

Clustered Index Design Guidelines

  

除少数例外情况外,每个表都应定义一个聚簇索引

如果少数例外中的一个是另一个索引,则会被调出 另一个非聚集索引不是没有聚簇索引的原因。

Nonclustered Index Structures

非聚簇索引行中的行定位器是指向行的指针,或者是行的聚簇索引键,如下所述:

  • 如果表是堆,则表示它没有聚簇 index,行定位器是指向行的指针。指针已构建 从文件标识符(ID),页码和行号开始 这页纸。整个指针称为行ID(RID)。
  • 如果表具有聚簇索引,或索引是索引的 在view中,行定位器是行的聚簇索引键。如果 聚簇索引不是唯一索引,SQL Server使任何重复 通过添加一个名为a的内部生成值来唯一键 uniqueifier。这个四字节值对用户不可见。它只是 在需要使群集密钥唯一使用时添加 非聚集索引。 SQL Server通过搜索检索数据行 聚簇索引使用存储在叶子中的聚簇索引键 非聚集索引的一行。

即使有PK,他们也可以选择使用RID。为什么你认为聚簇索引较慢?