我有一个第三方数据库,其中大量表都有一个“companyID”列,并且针对这些表的大部分查询都包含companyID = @companyID
在 where 子句中。
[编辑:除了 where 子句之外,companyID 通常也用在大多数查询的 order by 子句中:例如order by companyId, otherField1, otherField2 etc..
]
在我们的组织中,companyID 列始终填充 1(尽管在未来某个时候可能会发生变化)。
现在我正在考虑在这些表上创建一些索引。SQL Server 推荐了一些“缺失索引”,所有推荐都包含 companyID 字段作为索引中的第一列。
按照首先指定最具选择性的列的原则,我认为我应该将 companyID 列放在最后,或者甚至根本不在索引中。但是后来我想知道为什么 SQL Server 的缺失索引视图总是建议把它放在第一位——当然 SQL Server 足够聪明,知道每一行都包含该列的相同值?
如果您正在为此列创建索引或统计信息,则 SQL Server 只知道列内容。如果 companyID 总是用 1 填充,你永远不想为它创建索引——即使是作为多列索引的最后一部分。推荐的指数有时是愚蠢的,应该被认为是猜测。