所以我有這個奇怪的問題與SQL Server存儲過程。基本上我有這個漫長而複雜的過程。是這樣的:奇怪的SQL Server查詢問題
SELECT Table1.col1, Table2.col2, col3
FROM Table1 INNER JOIN Table2
Table2 INNER JOIN Table3
-----------------------
-----------------------
(Lots more joins)
WHERE Table1.Col1 = dbo.fnGetSomeID() AND (More checks)
-----------------------
-----------------------
(6-7 More queries like this with the same check)
的問題是在結束Table1.Col1 = dbo.fnGetSomeID() WHERE子句中該檢查。函數dbo.fnGetSomeID()返回一個簡單的整數值。所以當我硬編碼值爲,其中函數調用應該是SP只需要約15秒。但是當我在WHERE子句中用該函數調用替換它時,大約需要3.5分鐘。
所以我這樣做:
DECLARE @SomeValue INT
SET @SomeValue = dbo.fnGetSomeID()
--Where clause changed
WHERE Table1.Col1 = @SomeValue
所以現在函數只調用一次。但仍然是3.5分鐘。所以我繼續這樣做:
DECLARE @SomeValue INT
--Removed the function, replaced it with 1
SET @SomeValue = 1
--Where clause changed
WHERE Table1.Col1 = @SomeValue
而且還需要3.5分鐘。爲什麼性能會影響?如何讓它消失?
需要多長時間自己執行`dbo.fnGetSomeID()` – 2009-04-22 08:53:14
不到一秒鐘。 – 2009-04-22 08:57:11