我有一个包含超过 500,000 条记录的 access 数据库,我想批量删除记录。我得到了一个我需要根据特定条件删除的 id 列表,这可能是 1 ~ 5000。现在我的代码看起来像这样
for ( i = 0 to 5000 )
{
CDatabase.ExecuteSQL( Delete from table where id = ItemToDelete(i) )
}
每个 sql 调用大约需要 1 秒。
是否可以选择批量删除或有更好的方法来做到这一点?
我已经很多年没有做过 Access,但我也遇到了同样的挑战。我不会首先获取满足某些条件的所有记录,而是首先尝试发出 DELETE WHERE “某些条件”。它可能仍然很慢,但会将 SQL 调用的数量从 5000 减少到 1。
有了这么大的#,一个更极端的解决方案可能只是将整个表转储到一个文本文件并编写一个小程序以仅使用您想要的那些重新加载它。对于一次性的事情可能不是一个好的解决方案,但如果你每个月都这样做......
但总的来说,最小化#Sql 调用是提高性能的最佳方式。根据服务器的不同,如果 WHERE 子句仅包含主键字段,则删除操作可能会快很多。
该声明应为:
Delete from table where id between 1 and 5000
如果您有条件,在大多数情况下,您应该能够构建 WHERE 语句。不要尝试使用 IN 单独列出 5000 个 ID。你会遇到各种限制。
如果无法区分删除标准,则可以在表格或 CSV 中列出单个 ID,两者都可以与 IN 一起使用。