2010-01-21 89 views
1

我和我的同事們有一個關於SQL Server 2008查詢長度和SQL Server Optimizer的問題。存儲過程中where子句的最大數量

我們正在計劃生成一些可能有很多參數的存儲過程。在我們的存儲過程中,我們只需從連接其他表的表中選擇一些值。

我們的存儲過程看起來像這樣

CREATE PROCEDURE QueryTable 
@Parameter001 nvarchar(20), 
@Parameter002 int, 
@Parameter003 datetime, 
@Parameter004 decimal(11,2), 
@Parameter005 date, 
@Parameter006 varchar(150), 
@Parameter007 int, 
@Parameter008 decimal(5,2), 
@Parameter009 nvarchar(10), 
@Parameter010 nvarchar(200), 
@Parameter011 nvarchar(50) --, 
--...and so on, there are probably 50 to 100 parameters here 

AS 
BEGIN 
SET NOCOUNT ON; 

SELECT ID, COL01, COL02, COL03, COL04, COL05 from TestTable T 
LEFT JOIN AnotherTable A On T.SomeColomn = A.SomeColumn 
LEFT JOIN AThirdTable ATT On A.ThirdTableID = ATT.Id 
--and so on, probably 5-10 Tables joined here 
WHERE 
     T.Col02 = @Parameter001 AND 
     T.Col05 = @Parameter004 AND 
     ATT.SomeColumnContainingData = @Parameter027 
     A.AnotherID = @Parameter050 
     --probably 50 to 100 conditions here (Number of conditions equals number of parameters) 
END 
GO 

我們的問題: 是否有哪裏條件查詢優化和SQL服務器緩存可以考慮量的限制嗎? 如果沒有這樣的技術限制,那麼在這種情況下可以應該使用多少條件,是否有最佳做法?

回答

0

如果有人有興趣...

我們通過生成是在服務器上執行的動態SQL解決了這個問題。通過這種方式,只與條款的使用有關,並且聲明相對較短。

0

SQL Server聯機叢書有一個實現限制列表,包括查詢的各個方面。 This是SQL Server 2005的列表。

+0

(http://technet.microsoft.com/en-us/library/ms143432.aspx「This」)是SQL Server 2008的鏈接。 – DrummingCoder 2010-01-21 10:26:49

1

WHERE子句數量的限制不會是你的問題。

緩存的參數嗅探和差(或不正確)的查詢計劃可能是。

這可以通過使用OPTIMIZE FOR

很明顯,不那麼複雜,你可以在WHERE子句中,最好是有所迴避。

相關問題