Я використовую SQL Server 2008 R2, і у мене є цей псевдо-запит (SP):
select ...
from ...
WHERE @LinkMode IS NULL
AND (myColumn IN (...very long-running query...))
...
...
Проблема полягає в тому, що запит займає дуже багато часу, навіть якщо я виконую SP @LinkMode=2
.
Як ви помітили, тривалий запит повинен виконуватися лише в тому випадку, якщо @LinkMode є нульовим, що тут не так. У моєму випадку @LinkMode = 2!
Однак якщо я зміню це на:
select ...
from ...
WHERE 1=2
AND (myColumn IN (...very long time exeted query...))
...
...
СП дійсно працювати швидко.
Я чув, що раніше оптимізатор може оптимізувати порядок критеріїв.
Тому я прошу:
Навіть якщо оптимізатор вибере інший маршрут, що може бути швидше, ніж перевірка, якщо
=null
? Я маю в виду, я думаю , що перевіркаif a==null
є набагато швидше , ніж при запуску іншого довгого запиту ...Як я можу змусити SQL Server виконувати запит так, як я його написав (те саме замовлення)?