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

Откуда:
Сообщений: 143
Как в ms sql сделать индекс по функции (такая фишка есть в оракле).
Проблема в сортировке поля даты, где есть NULL значения (NULL считать самым большим значением).
13 мар 13, 00:06    [14042879]     Ответить | Цитировать Сообщить модератору
 Re: Индекс по функции  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
по сабжу - попробуйте сделать индекс по вычислимому полю
кажется, оно должно быть persisted для этого... точно не помню, гляньте в доке

по поводу сортировки я, честно говоря, не понял что за проблема. наверное, что-то оптимизируете
13 мар 13, 00:14    [14042900]     Ответить | Цитировать Сообщить модератору
 Re: Индекс по функции  [new]
ОперацияПингвин
Member

Откуда:
Сообщений: 647
Блог
Сделать можно, но сервер запросы к этой таблице перестанет параллелить.
13 мар 13, 00:45    [14042950]     Ответить | Цитировать Сообщить модератору
 Re: Индекс по функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47086
ArtMan
Проблема в сортировке поля даты, где есть NULL значения (NULL считать самым большим значением).
По возрастанию:
ORDER BY CASE WHEN DateField IS NULL THEN 0 ELSE 1 END DESC, DateField;
По убыванию:
ORDER BY CASE WHEN DateField IS NULL THEN 0 ELSE 1 END, DateField DESC;
В чём проблема?
13 мар 13, 09:45    [14043548]     Ответить | Цитировать Сообщить модератору
 Re: Индекс по функции  [new]
ArtMan
Member

Откуда:
Сообщений: 143
проблема в том, что индекс не берется и операция сортировки от этого дорогая.

Почему я не могу создать колонку вычисляемую isnull([MYDATE],'99991231') с типом persisted, сервер ругается что

Computed column С1 in table T1 cannot be persisted because the column is non-deterministic.
13 мар 13, 10:33    [14043794]     Ответить | Цитировать Сообщить модератору
 Re: Индекс по функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47086
ArtMan
проблема в том, что индекс не берется и операция сортировки от этого дорогая.

Почему я не могу создать колонку вычисляемую isnull([MYDATE],'99991231') с типом persisted, сервер ругается что

Computed column С1 in table T1 cannot be persisted because the column is non-deterministic.
CREATE TABLE покажите
13 мар 13, 10:37    [14043816]     Ответить | Цитировать Сообщить модератору
 Re: Индекс по функции  [new]
Shakill
Member

Откуда: мск
Сообщений: 1882
ArtMan
проблема в том, что индекс не берется и операция сортировки от этого дорогая.

Почему я не могу создать колонку вычисляемую isnull([MYDATE],'99991231') с типом persisted, сервер ругается что

Computed column С1 in table T1 cannot be persisted because the column is non-deterministic.


isnull([MYDATE], CONVERT(datetime2, '9999-12-31', 126)))
13 мар 13, 10:38    [14043822]     Ответить | Цитировать Сообщить модератору
 Re: Индекс по функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47086
Кстати, 112-й стиль тоже делает функцию детерминированной.
ISNULL([MYDATE],CONVERT(DATETIME,'99991231',112))
13 мар 13, 11:06    [14044033]     Ответить | Цитировать Сообщить модератору
 Re: Индекс по функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47086
Для индекса по вычисляемому полю PERSISTED вовсе не обязательно.
13 мар 13, 11:10    [14044057]     Ответить | Цитировать Сообщить модератору
 Re: Индекс по функции  [new]
ОперацияПингвин
Member

Откуда:
Сообщений: 647
Блог
isnull( @date, {d '2100-01-01'} )
13 мар 13, 11:35    [14044255]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить