Как я могу увеличить производительность хранимой процедуры с помощью нескольких операторов if else?
Привет,
У меня есть одна хранимая процедура с несколькими операторами if-elseif-else.Когда я пытаюсь удалить этот оператор if elseif и выполнить только одну часть этого запроса, он дает результат очень быстро, но когда я использую этот запрос с несколькими другими запросами, использующими оператор if-elseif case, то это занимает слишком много времени...
Что я уже пробовал:
Я попытался удалить оператор if elseif и выполнить один запрос, тогда он работает очень быстро.Но тот же самый запрос с оператором if тогда занял много времени для генерации результата.
Suvendu Shekhar Giri
Пожалуйста, покажите свой запрос.
Содержит ли ваш условный оператор запрос?
Bhavesh Jogani IT
если @Status = 1
начать
выбирать.....
конец
иначе если @Status = 2
начать
выбирать.....
конец
иначе если @Status = 3
начать
выбирать.....
конец
иначе если....
в этой хранимой процедуре есть еще много других операторов if..
Suvendu Shekhar Giri
Хорошо. Я предполагаю, что операторы select внутри каждого условного блока будут идентичны, и в этом случае также может быть возможно написать один оператор select с эффективным использованием CASE WHEN
заявления.
Можно ли показать 2 или 3, Если ... иначе... в этом случае?
Вы можете изменить имена таблиц и столбцов, но, пожалуйста, сохраните структуру запроса прежней.
Richard Deeming
Похоже, что это может быть нюхание параметров[^]- SQL выбирает план выполнения, который хорошо работает для одного набора параметров, но не для другого.
Попробуйте переместить тело каждой ветви в свою собственную хранимую процедуру или добавить OPTION RECOMPILE
к вашей процедуре.
ZurdoDev
Если заявления не будет замедлять работу производительность. Вам нужно использовать инструменты, чтобы выяснить, почему это происходит медленно.
Bhavesh Jogani IT
Не могли бы вы предложить лучший инструмент для этого?
ZurdoDev
Поместите sql в окно запроса и используйте опцию Показать расчетный план выполнения.