Добавить путь к файлу сообщения, если регулярное выражение соответствует

Динамически изменяющиеся поисковые запросы, основанные на данных параметрах, являются сложным предметом и делают это один за другим, даже с очень незначительной разницей, могут иметь серьезные последствия для производительности. Ключ должен использовать индекс, игнорировать компактный код, игнорировать беспокойство о повторении кода, вы должны составить хороший план выполнения запроса (использовать индекс).

Прочитайте это и рассмотрите все методы. Ваш лучший метод будет зависеть от ваших параметров, ваших данных, вашей схемы и фактического использования:

Условия динамического поиска в T-SQL by Erland Sommarskog

Проклятие и благословения динамического SQL от Erland Sommarskog

Если у вас есть соответствующая версия SQL Server 2008 (SQL 2008 SP1 CU5 (10.0.2746) и более поздняя версия), вы может использовать этот небольшой трюк для фактического использования индекса:

Добавить OPTION (RECOMPILE) в ваш запрос, см. статью Erland , а SQL Server разрешит OR из (@LastName IS NULL OR LastName= @LastName) до того, как план запроса будет создан на основе значений времени выполнения локальных переменных и будет использоваться индекс.

Это будет работать для любой версии SQL Server (вернет правильные результаты), но включит только OPTION (RECOMPILE), если вы используете SQL Server 2008 SP1 CU5 (10.0.2746) и позже. OPTION (RECOMPILE) перекомпилирует ваш запрос, только перечисленная версия перекомпилирует его на основе текущих значений времени выполнения локальных переменных, что даст вам лучшую производительность. Если не в этой версии SQL Server 2008, просто оставьте эту строку выключенной.

CREATE PROCEDURE spDoSearch
    @FirstName varchar(25) = null,
    @LastName varchar(25) = null,
    @Title varchar(25) = null
AS
    BEGIN
        SELECT ID, FirstName, LastName, Title
        FROM tblUsers
        WHERE
                (@FirstName IS NULL OR (FirstName = @FirstName))
            AND (@LastName  IS NULL OR (LastName  = @LastName ))
            AND (@Title     IS NULL OR (Title     = @Title    ))
        OPTION (RECOMPILE) ---<<<

0
задан JCJ 29 March 2019 в 12:48
поделиться