非主键列上的聚簇索引或非聚簇索引?

时间:2011-02-15 20:06:32

标签: sql indexing

在我的情况下,我有一个表(很多表)使用标识列作为主键。它们还将包含唯一的int列RecordID。 RecordID的90%将用于搜索记录。 ID标识列存在的唯一原因是在整个系统中保持一致。在这种情况下,我应该从ID列中删除聚集索引并将其添加到RecordID列吗?然后在主键ID中添加非聚集索引,在极少数情况下,它将用于获取记录。谢谢!

1 个答案:

答案 0 :(得分:4)

如果您的查询是RecordID上的单身搜索(即WHERE RecordID=...),那么我不会更改它。确实,它上面的聚簇索引会更快,但只有在非常热的情况下才会引人注意。

如果您有范围查询(BETWEEN<>),我会考虑进行更改。范围扫描可以从聚集索引中获益更多,因为非聚集索引可能受index tipping point的约束。

另一件需要考虑的事情是,如果您的排序要求可以通过此聚簇索引(查询中的ORDER BY,或GROUP BY或ranking functions(如带有ORDER by子句的ROW_NUMBER))来满足。聚集索引可以更好地帮助它们。