Как мне индексировать таблицу для оптимизации, чтобы найти ноль? - PullRequest
3 голосов
/ 10 марта 2010

У меня есть таблица, и единственный раз, когда я буду выбирать или делать что-то против нее, это найти все строки, в которых столбец с определенной датой равен нулю. Оттуда я что-то с этим делаю и обновляю этот столбец, и, вероятно, я больше никогда не буду посещать этот ряд, за исключением целей аудита.

Итак, есть ли лучший способ убедиться, что строки, в которых мой столбец SentDate имеет значение null, будут найдены быстрее?

Ответы [ 3 ]

2 голосов
/ 11 марта 2010

Для оптимизации таблицы для поиска значений 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

План запроса для выбора четко показывает, что для поиска строки используется поиск по ключу 'NULL'.

1 голос
/ 10 марта 2010

Вы можете установить Default Value or Binding поля в то, что никогда не будет использоваться, а затем искать это значение. В противном случае вы будете выполнять сканирование таблицы.

0 голосов
/ 10 марта 2010

В SQL Server 2008 вы можете фильтровать индекс, поэтому теоретически вы можете создать свой индекс, включающий только значения NULL, т. Е. ГДЕ SentDate IS NULL.

...