2012-07-07 32 views
0

我不知道這是否是一個SQL Server的錯誤或我的錯,但這裏的情況是:SQL服務器:單獨的查詢返回在不到一秒鐘,但結合那些INTERSECT需要3分鐘

查詢1

select PK FROM PI_INFORM WHERE RECORD_DATE>DATEADD(hour,-48, GETDATE()) 

這需要小於0.5秒,並返回20000個記錄

QUERY 2

SELECT PK FROM dbo.getInformFullTextPKs('"HELLO"') 

這需要不到1秒,並返回500條記錄

問題 如果我們加入這兩個查詢與相交,時間超過3分鐘。執行計劃顯示一切都使用INDEX SEEK執行。

SELECT * FROM PI_INFORM WITH (NOLOCK) 
WHERE PK IN (

select PK FROM PI_INFORM WHERE RECORD_DATE>DATEADD(hour,-48, GETDATE()) 

INTERSECT 

SELECT PK FROM PI_INFORM WHERE PK IN (SELECT PK FROM dbo.getInformFullTextPKs('"HELLO"')) 
) 
+3

請張貼所有三個圖形執行計劃。 – usr 2012-07-07 12:41:06

+0

您是否有意使用NOLOCK,並充分了解其侷限性,或者是一個精靈灰塵渦輪按鈕? – 2012-07-07 20:47:53

回答

1

以下查詢等同,應該跑得更快

SELECT * FROM PI_INFORM WITH (NOLOCK) 
WHERE 
PK IN (SELECT PK FROM dbo.getInformFullTextPKs('"HELLO"')) AND 
RECORD_DATE>DATEADD(hour,-48, GETDATE()) 
+0

好主意。原始查詢中的一個連接是多餘的。 – usr 2012-07-07 15:11:27