Performance
查詢性能問題
我需要幫助來提高以下查詢的性能。它的目的是從一組具有相同 ID(雙重)的記錄中選擇一個記錄。規則是 Date2 必須是最新的並且 Date1 必須存在:
對於
InputTable (= rst(0) )
do 中的每個不同的 ID:INSERT INTO FinalTable(ID, FID, KeyValue1, KeyValue2, Date1) SELECT InputTable.ID, InputTable.FID, InputTable.KeyValue1, InputTable.KeyValue2, InputTable.Date1 FROM ( SELECT TOP 1 * FROM ( SELECT * FROM InputTable WHERE ID='" & rst(0) & "' And Date1<>'' ) WHERE Date2 = ( SELECT Max(Date2) FROM InputTable WHERE ID = '" & rst(0) & "' and Date1 <> '' ) );
InputTable 有大約 400.000 條記錄和約 200.000 個不同的 ID,並且僅包含將在 Final Table 中的 5 個欄位,所有這些欄位都是 TEXT。
InputTable 是一個 importet .txt 文件,我在任何真實數據庫之外使用 ACCESS。結果將再次寫入 .txt 文件。
每個ID大概需要1秒左右,太長了……能不能顯著提升性能?
我真的很感激任何幫助。
為每個不同的 ID 值重複執行這些子查詢是要你的命。我在包含 10,000 行的樣本表上對您的方法進行了測試,在我的筆記本上執行大約需要 2.5 分鐘。相比之下,以下程式碼在不到 0.5秒的時間內始終返回相同的結果:
Option Compare Database Option Explicit Sub UsingAggregateQuery() Dim cdb As DAO.Database, t0 As Single Set cdb = CurrentDb cdb.Execute "DELETE FROM FinalTable", dbFailOnError t0 = Timer cdb.Execute _ "INSERT INTO FinalTable(ID, FID, KeyValue1, KeyValue2, Date1) " & _ "SELECT InputTable.ID, " & _ " Last(InputTable.FID), " & _ " Last(InputTable.KeyValue1), " & _ " Last(InputTable.KeyValue2), " & _ " Last(InputTable.Date1) " & _ "FROM " & _ " (" & _ " SELECT ID, FID, KeyValue1, KeyValue2, Date1 " & _ " FROM InputTable " & _ " WHERE Date1 <> '' " & _ " ORDER BY ID, Date2 " & _ " ) " & _ "GROUP BY ID;", _ dbFailOnError Debug.Print Format(Timer - t0, "0.0") & " seconds" Set cdb = Nothing End Sub
編輯
我剛剛對 400,000 行的範例表進行了另一次測試,上面的程式碼在 7 秒內完成