聚簇索引的列顺序如何影响性能

时间:2012-11-28 22:49:04

标签: performance tsql indexing primary-key clustered-index

我有一个带有两个外键列(CategoryId int, ProductId int)的简单映射表。主键适用于两列。

虽然每个产品 可以拥有多个类别,但是拥有更多产品并不常见 另一方面,类别通常有10k +产品。

主键中列的顺序如何影响性能?

该表的常见用法是基于类别的产品:

SELECT ProductId FROM [table] WHERE CategoryId = @catid

我知道如果这是一个非聚集索引,我希望CategoryId首先从上面的查询中获得最佳性能。群集索引也是如此吗?

1 个答案:

答案 0 :(得分:3)

是的,聚集索引也是如此。聚类确定行的物理顺序。按顺序排列表有助于大多数表的I / O,因为行和页可以通过快速顺序I / O而不是随机访问来读取。

在这种情况下,如果您还需要获取单个产品的类别,则可以在(CategoryId,ProductId)上定义聚簇索引,在(ProductId,CategoryId)上定义非聚集索引。请注意两个索引如何具有相同的键。如果映射表只有2列,则两个索引上的索引页将具有完全相同的数据 - 只是以不同的顺序排序。非聚集索引应该在这里表​​现得非常好,因为SQL Server不需要进行书签查找来获取行中的其他数据。