我有一个包含两个非常重要的字段的表:
id INT identity(1,1) PRIMARY KEY
identifiersortcode VARCHAR(900)
我的应用总是根据identifiersortcode
对UI中的搜索结果进行排序和分页,但所有表连接(而且数量众多)都在id
字段。 (旁白:是的,排序代码确实那么长。这有很强的 BL 原因。)
此外,由于 O/RM 的使用,大多数 SELECT 语句将提取几乎每一列。
目前,聚集索引位于 id
上,但我想知道大多数查询的 TOP/ORDER BY 部分是否会使 identifiersortcode
成为更具吸引力的选项,因为聚集键,甚至考虑正在进行的所有表连接。
表上的插入和对 identifiersortcode
的更改非常有限,更改聚集索引会对插入/更新操作造成问题。
尝试将排序代码的非聚集索引设为覆盖索引(使用INCLUDE
)并不是一个好的选择。有许多大型列,其中一些有大量更新事件。
最佳答案
金伯利·L·特里普的criteria for a clustered index是这样吗:
- 独特
- 缩小
- 静态
- 不断增加
基于此,我会坚持使用您的整数身份 id
列,它满足上述所有条件。您的 identifiersortcode
将无法满足大部分(如果不是全部)这些要求。
关于sql - 聚集索引的困境 - ID 还是排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4660110/