2
在我的情况,我有一个表(很多表),使用身份列作为他们的主键。它们还将包含一个唯一的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,或者带有ORDER by子句的ROW_NUMBER,则为ranking functions)。聚集索引可以帮助他们更好。