5

我正在使用 SQL Server 2008 R2,我想在非唯一、可为空的字段上添加非聚集索引。我的索引还将包含一列,以避免访问我的聚集索引:

CREATE INDEX IX_My_Index 
ON MyTable (myBasicField) 
INCLUDE (myIncludedField);

在实际数据中myBasicField会有很多,NULLs我想知道是否有一种方法可以通过不扫描这些来提高性能NULLs,或者阻止NULL将值存储在我的索引上。

提前致谢。

4

2 回答 2

8

对于 SQL Server 2008 及更高版本,您可以使用过滤索引。在此处查看介绍性博客文章- 语法为:

CREATE INDEX IX_My_Index 
ON MyTable (myBasicField) 
INCLUDE (myIncludedField)
WHERE myBasicField IS NOT NULL;

任何包含相同WHERE子句的查询都可以利用这一点,并且如果您排除像这样的 NULL 值,索引会小很多,因此性能会更好。

于 2012-04-09T13:47:02.467 回答
3

您正在寻找过滤索引。看:

http://technet.microsoft.com/en-us/library/cc280372.aspx

于 2012-04-09T13:46:39.737 回答