我需要帮助来提高以下查询的性能。它的目的是从一组具有相同 ID(doublettes)的记录中选择一个记录。规则是 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,并且只包含将出现在最终表中的 5 个字段,所有这些字段都是文本。
InputTable 是一个 importet .txt 文件,我在任何真实数据库之外使用 ACCESS。结果将再次写入 .txt 文件。
每个ID大约需要1秒,这太长了......是否可以显着提高性能?
我真的很感激任何帮助。
为每个不同的 ID 值重复执行这些子查询会让您丧命。我在 10,000 行的示例表上对您的方法进行了测试,在我的笔记本上执行大约需要 2.5 分钟。相比之下,以下代码在不到 0.5秒的时间内始终返回相同的结果:
编辑
我刚刚在 400,000 行的示例表上运行了另一个测试,上面的代码在 7 秒内完成