Динамическое изменение поисков на основе заданных параметров - сложная тема, и выполнение одного способа по другому, даже с очень небольшим отличием, может иметь серьезные последствия для производительности. Ключ в том, чтобы использовать индекс, игнорировать компактный код, игнорировать беспокойство по поводу повторения кода, вы должны составить хороший план выполнения запроса (используйте индекс).
Прочтите это и рассмотрите все методы. Ваш лучший метод будет зависеть от ваших параметров, ваших данных, вашей схемы и вашего фактического использования:
Условия динамического поиска в T-SQL. Автор Erland Sommarskog
Проклятие и благословения динамического SQL Эрланда Соммарского
Если у вас есть правильная версия SQL Server 2008 (SQL 2008 SP1 CU5 (10.0.2746) и более поздние версии), вы можете использовать этот маленький трюк для фактического использования индекса:
Вы ничего не можете сделать, поскольку используете LIKE
, но если бы вы использовали равенство, вы могли бы добавить OPTION (RECOMPILE) в свой запрос, см. Статью Erland, и SQL Server разрешит OR изнутри (Column = @Param+'%' OR @Param='') AND ...
перед созданием плана запроса на основе значений времени выполнения локальных переменных, и индекс можно использовать, если вы не используете LIKE
.