我应该如何索引表以进行优化以找到null?

时间:2010-03-10 19:42:47

标签: sql-server indexing null

我有一个表,我唯一一次选择或做任何事情就是找到某个日期列为空的所有行。从那里开始,我会用它做更新并更新该列,并且我可能永远不会再次访问该行,但审计目的除外。

那么,是否有最佳做法可以确保更快地找到我的列SentDate为空的行?

3 个答案:

答案 0 :(得分:2)

当然,要优化表以查找NULL,请使用索引。 NULL被索引并且可以像任何其他值一样寻找:

create table foo (a int null, b varchar(100) null);
create clustered index cdxFoo on foo(a);
go

insert into foo (a,b) select Number, 'not null' from master..spt_values

insert into foo (a,b) values (null, 'null')

select * from foo where a is null

select的查询计划清楚地显示了对'NULL'键的搜索用于定位行。

答案 1 :(得分:1)

您可以将字段的Default Value or Binding设置为永不使用的字段,然后查找该值。否则你将进行表扫描。

答案 2 :(得分:0)

在SQL Server 2008中,您可以过滤索引,因此理论上您可以创建索引以仅包含NULL值,即WHERE SentDate IS NULL。