Я ищу мнения и, возможно, конкретный ответ на следующее.
Этот вопрос относится к версии SQL Server 2008 R2 +T-SQL ISNULL, в котором Условие исполнения
В хранимой процедуре, у меня есть дополнительный параметр запроса типа DATE, позволяет называть его @MyVar.
Хранимая процедура выполняет следующий запрос:
SELECT A, B, C
FROM MyTable
WHERE MyTable.Field1 = ISNULL(@MyVar,MyTable.Field1)
Какова стоимость делает ISNULL (@ MYVAR, MyTable.Field1) если @MyVar является NULL? мне интересно, если это лучше разделить случаи, такие как:
IF (@MyVar IS NULL)
SELECT A, B, C
FROM MyTable
ELSE
SELECT A, B, C
FROM MyTable
WHERE MyTable.Field1 = @MyVar
Спасибо!
это предотвратить использование индексов, так как вы сравниваете 'field1' против вычисленного значения каждого поля, которое не может быть индексируются. –
Вы имеете в виду 'WHERE MyTable.Field1 = @ MyVar' в конце. – jarlh
@MarcB Я не понимаю, почему это помешало бы использовать индексы – Lamak