2009-05-26 37 views
1

我有這樣的查詢作爲存儲過程:爲什麼此存儲過程在Management Studio中快速執行,但不在應用程序中執行?

SELECT  ID 
    FROM   dbo.tblRentalUnit 
    WHERE  (NOT EXISTS 
     (SELECT  1 AS Expr1 
     FROM   dbo.tblTenant 
     WHERE  (dbo.tblRentalUnit.ID = UnitID))) 

在Microsoft SQL Server Management Studio中快車,它執行16毫秒。當我在由Visual Studio 2008自動生成的類型化數據集中使用它時,它將在64,453毫秒內執行。一分多鐘。

估計和執行計劃是這樣的:

 
Select [0%] <- Filter [1%] <- Merge Join (Left Outer Join) [28%] <- Index Scan [16%] 
                   <- Sort [43%] <- Clustered Index Scan [12%] 

爲什麼在這裏這種差異,以及如何糾正呢?

+0

如果您需要更多關於設置的信息,請告訴我! – Malfist 2009-05-26 13:59:01

+0

爲什麼這會被拒絕? – Malfist 2009-05-26 17:42:26

+0

可能是涉及藍天,綠草和東方升起的太陽的東西。 – TheTXI 2009-05-26 17:55:55

回答

2

這聽起來像一個錯誤緩存的查詢計劃。

您的索引和統計信息是否最新?

順便說一句,如果tblTenant.UnitId是Foriegn Key插入tblRentalUnit.ID 那麼你的查詢可以被改寫爲:

SELECT ru.ID  
FROM   
    dbo.tblRentalUnit ru 
    LEFT JOIN dbo.tblTenant t ON ru.ID = t.UnitID 
WHERE 
    t.UnitID IS NULL 
0

你每次測試(來自客戶端)之前刷新緩衝區?確保在每次測試之間執行DBCC DROPCLEANBUFFERS和DBCC FREEPROCCACHE。

相關問題