MS Access SQL性能问题INNER JOIN +更新数据

时间:2018-03-14 08:11:54

标签: sql database vba performance ms-access

我正在使用2张桌子:

首先作为保存数据的主表

第二个是每天导入新报告的临时表,并检查新报告和主表中记录之间的差异。

        tablename="Temp"
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel10, tablename,strPath, True, "A:CH"  
        stringSQL = 
        UPDATE 
        Main INNER JOIN Temp ON Main.[PackageNumber] = Temp.[PackageNumber]
        SET 
        Main.[Field1]=Temp.[Field1],
        Main.[Field2]=Temp.[Field2] ... 

如果在临时表中我可以找到已经存在的包号的记录,我必须使用临时表中的数据更新主表中的整行。 主表中大约有30列,每天都有几千条记录要检查临时报告。

目前我遇到性能问题,导致整个操作可能需要超过一小时! 有什么可能让它跑得更快? 我已经尝试过“修复和压缩数据库”功能。

2 个答案:

答案 0 :(得分:0)

您需要在导入的表的JOIN列上创建索引。我认为它是主键。

运行DoCmd.TransferSpreadsheet后,请执行以下操作:

CurrentDb.Execute "CREATE UNIQUE INDEX PrimaryKey ON Temp (PackageNumber) WITH PRIMARY"

您的Main表应该已将PackageNumber作为主键。

答案 1 :(得分:0)

您可以直接查询Excel文件,避免创建临时表以及与之相关的任何开销:

window.setTimeout(runScripts, 500);

这比UPDATE Main INNER JOIN [Excel 10.0;HDR=Yes;DATABASE=C:\YourFile.xls].[A:CH] Temp ON Main.[PackageNumber] = Temp.[PackageNumber] SET Main.[Field1]=Temp.[Field1], Main.[Field2]=Temp.[Field2] ... 的工作方式更快,在我看来应该尽可能避免。