在我的情况下,我有一个表(很多表)使用标识列作为主键。它们还将包含唯一的int列RecordID。 RecordID的90%将用于搜索记录。 ID标识列存在的唯一原因是在整个系统中保持一致。在这种情况下,我应该从ID列中删除聚集索引并将其添加到RecordID列吗?然后在主键ID中添加非聚集索引,在极少数情况下,它将用于获取记录。谢谢!
答案 0 :(得分:4)
如果您的查询是RecordID上的单身搜索(即WHERE RecordID=...
),那么我不会更改它。确实,它上面的聚簇索引会更快,但只有在非常热的情况下才会引人注意。
如果您有范围查询(BETWEEN
,<
或>
),我会考虑进行更改。范围扫描可以从聚集索引中获益更多,因为非聚集索引可能受index tipping point的约束。
另一件需要考虑的事情是,如果您的排序要求可以通过此聚簇索引(查询中的ORDER BY,或GROUP BY或ranking functions(如带有ORDER by子句的ROW_NUMBER))来满足。聚集索引可以更好地帮助它们。