Влияние производительности условий SQL 'ИЛИ', когда одна альтернатива тривиальна? - PullRequest
3 голосов
/ 24 февраля 2009

Я создаю хранимую процедуру для поиска некоторых данных в моей базе данных в соответствии с некоторыми критериями, введенными пользователем.

Мой SQL-код выглядит так:

Create Procedure mySearchProc
(
@IDCriteria bigint=null,
...
@MaxDateCriteria datetime=null
)
as
select Col1,...,Coln from MyTable 
where (@IDCriteria is null or ID=@IDCriteria)
...
and (@MaxDateCriteria is null or Date<@MaxDateCriteria)

Редактировать : у меня около 20 возможных параметров, и каждая комбинация из n ненулевых параметров может иметь место.

Можно ли написать код такого типа с точки зрения производительности? (Я использую MS SQL Server 2008)

Будет ли генерация кода SQL, содержащего только необходимые выражения where, значительно быстрее?

Ответы [ 12 ]

0 голосов
/ 24 февраля 2009

Вы можете выполнять выборочные запросы в порядке наиболее распространенных / эффективных (индексированных и т. Д.) Параметров и добавлять PK (ы) во временную таблицу

Это создаст (надеюсь, небольшой!) Набор данных

Затем объедините эту временную таблицу с основной таблицей, используя полное предложение WHERE с

SELECT ...
FROM @TempTable AS T
    JOIN dbo.MyTable AS M
        ON M.ID = T.ID
WHERE (@IDCriteria IS NULL OR M.ID=@IDCriteria)
...
AND (@MaxDateCriteria IS NULL OR M.Date<@MaxDateCriteria)

стиль для уточнения (маленького) подмножества.

0 голосов
/ 24 февраля 2009

Относительно "Будет ли генерация кода SQL, содержащего только необходимые условия where, значительно быстрее?"

Я так не думаю, потому что таким образом вы эффективно удаляете положительные эффекты кэширования плана запросов.

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