我有一個需要很長時間才能完成的SQL查詢(對於SQL Server 2008 R2)。我想知道是否有更好的方法來做到這一點?這個SQL查詢可以優化運行得更快嗎?
SELECT @count = COUNT(Name)
FROM Table1 t
WHERE t.Name = @name AND t.Code NOT IN (SELECT Code FROM ExcludedCodes)
表1中有大約90萬行,並按名稱和代碼索引。 ExcludedCodes只有大約30行。
這個查詢是在一個存儲過程中被調用了大約40k次,這個過程完成所花費的總時間是27分鐘。我相信這是我最大的瓶頸,因爲它查詢的行數很多,它做它的次數。
所以,如果你知道一個很好的方法來優化它,將不勝感激!如果它不能再優化,我猜IM堅持了27分鐘......
編輯
我改變了NOT IN
到NOT EXISTS
並削減時間到10:59,讓孤單是一個巨大的獲得我的份量。我仍然試圖按照下面的建議去做group by statement,但是這需要完全重寫存儲過程,並且可能需要一些時間......(正如我之前所說的,我不是SQL中最好的,但它正在啓動在我身上生長。^^)
男人,你正在做一個90M-30行40000次的解析計數......你準確的預期:D – Sebas
你是否考慮過使用JOINs? –
是名稱唯一嗎? – Sebas