所以我有这个奇怪的问题与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