非聚集索引在堆与聚簇索引上的表现

时间:2011-02-23 17:19:24

标签: sql-server indexing clustered-index

This 2007 White Paper比较组织为聚簇索引的表上的单个select / insert / delete / update和range select语句的性能与组织为具有相同键上的非聚簇索引的堆的表的性能列作为CI表。

通常,聚集索引选项在测试中表现更好,因为只需要维护一个结构,因为不需要书签查找。

本文未涉及的一个可能有趣的案例是堆上的非聚簇索引与聚簇索引上的非聚簇索引之间的比较。在那个实例中,我原本预计堆可能会在NCI叶级别上执行得更好一次SQL Server有一个RID可以直接跟随而不需要遍历聚簇索引。

是否有人知道在该领域进行了类似的正式测试,如果有,结果是什么?

2 个答案:

答案 0 :(得分:31)

答案 1 :(得分:10)

正如Kimberly Tripp--索引女王 - 在她的博客文章The Clustered Index Debate continues...中解释得非常好,在数据库表上拥有一个聚类键几乎加快了所有操作 - 而不仅仅是{ {1}}。

与群集表相比,SELECT在堆上通常较慢,只要您选择良好群集密钥 - 类似于SELECT。如果您使用非常糟糕的聚类键,如GUID或具有大量可变长度组件的复合键,那么,但只有这样,堆可能会更快。但在这种情况下,你真的需要首先清理你的数据库设计......

所以一般来说,我认为堆中没有任何意义 - 选择一个好的,有用的聚类键,你应该从各方面受益。