sql - 聚集索引的困境 - ID 还是排序?

标签 sql sql-server indexing

我有一个包含两个非常重要的字段的表:

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/

相关文章:

SQL Where 子句反对 View

c# - Entity Framework 查询无法使用 asp.net

sql-server - 如何从 SQL Server 数据库中删除所有数据库索引

mysql - 如何在 RMySQL 上做累加和?在 phpMyAdmin 中工作,但在 R 中出错

mysql - 查询与另一个表中的条数相等的记录

sql-server - sql异常: No Process Is on the Other End of the Pipe

sql - Azure SQL 数据库行号无法正常工作

sql-server - XQuery - 迭代每个属性

用于搜索的 MySQL 多索引与多列索引

performance - RavenDB中如何决定是否将字段存储在索引中?