我對一個表中的約1,300,000條記錄進行了查詢。它需要滿足某些WHERE條件的某些記錄並將它們插入到另一個表中。它首先完全清除目標表。爲什麼我的SQL查詢的使用速度更快?
拍攝完成查詢的時間變得與每個執行更好地完成:
1st: 5 minutes, 3 seconds
2nd: 2 minutes, 43 seconds
3rd: 12 seconds
4th: 3 seconds
我不這樣做不僅僅是擊中執行的任何其他。我的查詢看起來像這樣(爲了長度目的而略作縮寫):
DELETE FROM dbo.ConsolidatedLogs --clear target table
DECLARE @ClientID int
DECLARE c CURSOR FOR SELECT ClientID FROM dbo.Clients
OPEN c
FETCH NEXT FROM c INTO @ClientID --foreach LogID
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO dbo.ConsolidatedLogs
(col1, col2)
SELECT col1, col2
FROM dbo.CompleteLogsRaw
WHERE col3 = true AND
ClientID = @ClientID
FETCH NEXT FROM c INTO @ClientID
END
CLOSE c
DEALLOCATE c
這是怎麼發生的? SQL Server究竟做了什麼來實現這一點呢?
該查詢將作爲SQL Server代理作業運行,每3小時運行一次。是否每次都需要5分鐘的時間,還是會縮短,因爲即使延遲了3個小時,工作只運行這一個查詢?
兩個詞:查詢計劃 – LittleBobbyTables
甜。你應該多放點肉,並把它作爲答案,以便我可以標記它。 – CptSupermrkt