2017-06-13 258 views
0

我有一個多個if-elseif- else語句的存儲過程。當我嘗試刪除此if elseif語句並執行該查詢的唯一的單部分,它返回的結果非常快,但是當使用此查詢與多個使用if-elseif case語句另一個查詢,那麼它需要太多的時間...如何使用多個if else語句提高存儲過程性能?

例如:

if @Status = 1 
begin 
    select ..... 
end 
else if @Status = 2 
begin 
    select ..... 
end 
else if @Status = 3 
begin 
    select ..... 
end 
else if.... 

還有更多else if語句在該存儲過程..

+2

請提供代碼的情況下,使我們能夠理解和如何聚合/如果人換掉了幫助。無論如何,如果select語句相似,則可以使用decode/case。 – Debabrata

+0

基於問題中使用的語法,我用'sql-server'重新標記了這個問題。 –

+0

使用IFs只會損害性能。發佈單個'SELECT'語句並嘗試重寫它們,以便*不需要該IF。添加適當的索引。如果沒有實際查詢,不可能提供更多幫助 –

回答

-2
USE [YourDB] 
GO 

CREATE PROCEDURE dbo.NameOfStorageProcedure @Status int 
AS 
if(@Status = 1) 
begin 
SELECT some 
FROM DB 
return 
end 

if(@Status = 2) 
begin 
SELECT Some 
FROM DB 
return 
end 

GO 
+0

你甚至讀過這個問題嗎?不僅如此,你的答案几乎是OP已經做的,但你做得更少,性能更差。 OP希望將多個if語句優化爲更快的方法。 –

+0

@RenéHoffmann如果你閱讀了標題,你會認爲OP希望*添加* IF/ELSE語句。當我在主頁上顯示時,我也是這樣。性能不受影響。它和原來的 –

+0

@RenéHoffmann一樣糟糕,事實上,讀取問題文本就好像OP要求如何保留IF語句 –

0

雖然它可能是在一些「不這樣做」的書,你可以嘗試創建每個status值的存儲過程,並通過構建動態TSQL語句("exec yourproc_" + statusValue)直接調用它。

create proc youproc_1 as 
begin 
select your_data_for_status1; 
end; 

create proc youproc_2 as 
begin 
select your_data_for_status2; 
end; 

等等

+0

我有32個不同的Status,因此無法創建32個StoredProcedure ..謝謝。 .. – Bhavesh