如果你在存儲過程中有多個if條件,那麼我估計執行計劃將會得到較少的優化,所以後者會更好?存儲過程優化執行計劃?
if not exists (select * from accounts)
begin
raiseerror('error', 16, 1);
end
begin try
select 1/0 from accounts
end try
begin catch
raiseerror('error', 16,1)
end catch
如果你在存儲過程中有多個if條件,那麼我估計執行計劃將會得到較少的優化,所以後者會更好?存儲過程優化執行計劃?
if not exists (select * from accounts)
begin
raiseerror('error', 16, 1);
end
begin try
select 1/0 from accounts
end try
begin catch
raiseerror('error', 16,1)
end catch
SQL Server將更好地優化「不存在」,因爲您告訴它它是你想要的。如果存在任何行,它可以跳過整個「檢索(很多)行」並返回布爾真/假
優化在現場系統上最好確定(或儘可能接近您的測試)因爲「你的里程可能會有所不同」。但是,如果您正在查看帳戶表中是否有任何記錄,請執行SELECT COUNT(*) from accounts
。
使用不存在通常對優化不利,所以這種情況更容易一些。
-1如果他想知道行是否存在,他爲什麼要求計數並比較爲零?此外,您聲稱「不存在」是「通常對優化不利」,需要備份一些文獻資料.... – Matthew 2011-06-08 16:46:08