SQL Server索引是否在非聚集的非唯一索引中为空值?

20 indexing sql-server-2008

我正在考虑向数据库表添加一个列,并且对于大多数行,该列可能为null但是我希望能够在该列上查询特定的非空值.因此,索引将有助于检索时间,但是如果包含空值会破坏我的索引的选择性.

我已经做了一些阅读,我得到的印象是,当涉及到NULL值和索引时,SQL Server不一定遵守标准,但我在文档中没有找到关于该主题的明确声明(索引设计基础,非聚簇索引结构)非聚集指数设计指南).我也找不到关于这个特定主题的问题.

任何输入(特别是文档参考)将非常感谢!

注意我使用的是SQL Server 2008,但是如果在'05到'12之间有相关的变化,我有兴趣听到这个.

Aar*_*and 16

我会建议一个过滤索引,例如WHERE column IS NOT NULL;- 这将允许您创建一个只困扰索引非NULL值的索引,并忽略所有没有值的行.您可能希望确保索引涵盖了您希望使用此类谓词运行的查询,这样您就不必返回整个表来查找查询需要输出的其他列(或使用在连接中,或以其他方式过滤,等).

更多细节在这里.

  • 那么 SQL Server 肯定会索引空值,对吗? (2认同)
  • 想通了;-)即使你有一个列的非聚集索引(其中SQL服务器将包含NULL)如果你在索引中'select`列不是'include`d它仍然可能决定做一个表扫描聚集索引. (2认同)