2012-11-16 232 views
-4

我正在運行以下查詢,但時間太長。有沒有辦法讓它更快或改變查詢的寫法?SQL Server 2008 R2查詢

請幫忙。

SELECT * 
FROM ProductGroupLocUpdate WITH (nolock) 
WHERE CmStatusFlag > 2 
     AND EngineID IN (0, 1) 
     AND NOT EXISTS (SELECT DISTINCT APGV.LocationID 
         FROM CM_ST_ActiveProductGroupsView AS APGV WITH(nolock) 
         WHERE APGV.LocationID = ProductGroupLocUpdate.Locationid); 
+2

可以擺脫內部查詢中的獨特性,儘管SQL服務器可能會爲自己弄清楚這一點。缺少什麼是你的表定義?你有什麼指數?你的桌子有多少行? – Laurence

+0

你不會給我們很多事情.....(1)那個查詢中涉及的表是什麼樣的(結構)? (2)它們包含什麼樣的數據 - 多少行,如何選擇這些柱? (3)你已經有了什麼樣的索引? –

回答

0

嘗試重寫查詢與加入

SELECT PGLU.* from ProductGroupLocUpdate PGLU WITH (NOLOCK) 
LEFT JOIN CM_ST_ActiveProductGroupsView APGV WITH (NOLOCK) 
     ON PGLU.LocationId = APGV.LocationID 
WHERE APGV.LocationID IS NULL AND CmStatusFlag>2 AND EngineID IN (0,1) 

取決於有多少數據是表中,檢查添加索引LocationId(兩個表中),CmStatusFlag和引擎ID

+0

左連接表是一個視圖 – faiz

+0

@faiz:LEFT JOIN表是一個視圖的事實是引擎的問題,而不是編寫SQL的人。但是,由於您沒有展示視圖的定義,因此您目前正在執行的相關子查詢很可能會加劇視圖工作問題,並且是對整體性能問題的主要貢獻。 –