Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 NULL - NOT NULL index  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
SQL 2012
Есть такая ситуация. В большой таблице 100+ млн строк, есть поле, которое в очень небольшом кол-ве случаев случаев ( < 0.1%) имеет значение NULL. Такие поля появляются при вставке (небольшое кол-во из всех вставляемых полей имеют NULL) . Нужно находить такие поля и в джобе и присваивать им NOT NULL значение.

Как создать INDEX, который был бы оптимален для условия (поле IS NULL) в указанной ситуации. Не хотелось бы городить индекс на все значения.

Посмотрел FILTERED INDEX, но есть сомнения. Update выглядит вот так

UPDATE T1 
SET T1.F1 = T1.F2 * T2.F3
FROM T1 
INNER JOIN T2 ON T1.ID = T1.T2_ID
WHERE T1.F1 IS NULL 


Я правильно понимаю, надо создать ?

CREATE NONCLUSTERED INDEX IX_T1 ON T1 (T2_ID, T1.F2)
WHERE F1 IS NULL 


Или есть идеи лучше?
23 июн 14, 16:38    [16207783]     Ответить | Цитировать Сообщить модератору
 Re: NULL - NOT NULL index  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Сделать поле t1.f1 not null и поправить код, который туда вставляет данные.
23 июн 14, 16:52    [16207900]     Ответить | Цитировать Сообщить модератору
 Re: NULL - NOT NULL index  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
CREATE NONCLUSTERED INDEX IX_T1 ON T1 (F1) WHERE F1 IS NULL
23 июн 14, 16:52    [16207903]     Ответить | Цитировать Сообщить модератору
 Re: NULL - NOT NULL index  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
a_voronin, T1.F2 можно в INCLUDE вынести
23 июн 14, 16:53    [16207908]     Ответить | Цитировать Сообщить модератору
 Re: NULL - NOT NULL index  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Гавриленко Сергей Алексеевич
Сделать поле t1.f1 not null и поправить код, который туда вставляет данные.


Код, который вставляет, вне моей зоны контроля. Я не могу его исправить.
23 июн 14, 16:56    [16207935]     Ответить | Цитировать Сообщить модератору
 Re: NULL - NOT NULL index  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Shakill
a_voronin, T1.F2 можно в INCLUDE вынести


Думаю это лучший вариант.
23 июн 14, 16:56    [16207936]     Ответить | Цитировать Сообщить модератору
 Re: NULL - NOT NULL index  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
invm
CREATE NONCLUSTERED INDEX IX_T1 ON T1 (F1) WHERE F1 IS NULL
Конечно же описАлся:
CREATE NONCLUSTERED INDEX IX_T1 ON T1 (ID) WHERE F1 IS NULL
Будет немного проигрывать по чтениям
CREATE NONCLUSTERED INDEX IX_T1 ON T1 (T2_ID) WHERE F1 IS NULL
Но выиграет по объему хранения.

Столбец F2 можно вообще не включать, даже в include, ибо выигрыша не дает.
23 июн 14, 18:11    [16208375]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить