Bhavesh Jogani IT Ответов: 1

Как я могу увеличить производительность хранимой процедуры с помощью нескольких операторов 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 в окно запроса и используйте опцию Показать расчетный план выполнения.

1 Ответов

Рейтинг:
2

ashokmaurya786

вы можете использовать CTE в этом контексте.