【发布时间】:2011-02-15 20:06:31
【问题描述】:
在我的情况下,我有一个使用标识列作为主键的表(很多表)。它们还将包含一个唯一的 int 列 RecordID。 90% 的时间 RecordID 将用于搜索记录。 ID 标识列存在的唯一原因是为了在我们的系统中保持一致。在这种情况下,我应该从 ID 列中删除聚集索引并将其添加到 RecordID 列吗?然后在主键 ID 中添加一个非聚集索引,在极少数情况下它将用于获取记录。谢谢!!
【问题讨论】:
在我的情况下,我有一个使用标识列作为主键的表(很多表)。它们还将包含一个唯一的 int 列 RecordID。 90% 的时间 RecordID 将用于搜索记录。 ID 标识列存在的唯一原因是为了在我们的系统中保持一致。在这种情况下,我应该从 ID 列中删除聚集索引并将其添加到 RecordID 列吗?然后在主键 ID 中添加一个非聚集索引,在极少数情况下它将用于获取记录。谢谢!!
【问题讨论】:
如果您的查询是对 RecordID 的单例搜索(即WHERE RecordID=...),那么我不会更改它。确实,它上的聚集索引会更快,但只有在真正非常热门的情况下才会引人注目。
如果您有范围查询(BETWEEN、< 或 >),我会考虑进行更改。范围扫描可以更显着地从聚集索引中受益,因为非聚集索引可能受制于index tipping point。
要考虑的另一件事是,如果您有可以通过此聚集索引满足的排序要求(查询中的 ORDER BY,或 GROUP BY,或 ranking functions,如带有 ORDER by 子句的 ROW_NUMBER)。聚集索引会更好地帮助这些。
【讨论】: