ISNULL замедляет запрос - PullRequest
       1

ISNULL замедляет запрос

6 голосов
/ 24 октября 2011

У нас есть таблица со значениями NULL или «Accepted».Мой запрос возвращает около 250 строк.

Если я добавлю условие where -

AND Description = 'Accepted'

, мои 250 строк вернутся через 2 секунды.

Однако, если я добавлюгде условие -

ISNULL(Description, '') = 'Accepted'

мои 250 строк возвращаются через 47 секунд.

Кто-нибудь сталкивался с проблемами производительности при использовании функции ISNULL?К сожалению, на данном этапе мне ограничено использование ISNULL.

Ответы [ 4 ]

12 голосов
/ 24 октября 2011

Когда вы включаете поле внутри функции, оно меняет порядок работы оптимизатора и заставляет его игнорировать индексы.

см. Здесь: Что делает оператор SQL пригодным для использования?

8 голосов
/ 24 октября 2011

Вы также можете полностью обойти функции, используя:

WHERE (Description = 'Accepted' OR Description IS NULL)

3 голосов
/ 24 октября 2011

Использование

ISNULL(Description, '') = 'Accepted'

в вашем случае условия не имеют никакого смысла в этом случае. Если описание имеет значение null, предложение where в

AND Description = 'Accepted'

все равно будет достаточно. Вы в основном сравниваете '' с 'Принятым' в каждой строке, где описание равно нулю.

Пожалуйста, опишите, что вы пытаетесь выполнить с помощью запроса, я думаю, вы, возможно, движетесь в неправильном направлении.

2 голосов
/ 24 октября 2011

Если вы пытаетесь использовать это в условии WHERE, используйте IS NULL, а не ISNULL

Поле ВЫБРАТЬ ИЗ таблицы, ГДЕ описание пусто

или наоборот

Поле ВЫБРАТЬ ИЗ таблицы, ГДЕ НЕ описание пусто

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...