我有一个包含超过500,000条记录的access数据库,我想批量删除记录。我得到了一个根据特定条件需要删除的I列表,这个值可能是1到5000。现在,我的代码如下所示
for ( i = 0 to 5000 )
{
CDatabase.ExecuteSQL( Delete from table where id = ItemToDelete(i) )
} 每个sql调用几乎需要1秒。
有没有批量删除的选项,或者有没有更好的方法?
发布于 2012-09-27 07:44:03
我已经很多年没有使用Access了,但我也遇到过同样的挑战。我不会获取所有满足某个条件的记录,而是首先尝试发出一个DELETE WHERE“某个条件”。它可能仍然很慢,但会将SQL调用的数量从5000次减少到1次。
有了这么大的#,一个更极端的解决方案可能是将整个表转储到一个文本文件中,然后编写一个小程序来重新加载它,只加载你想要的那些。
但一般来说,最小化# Sql调用是提高性能的最佳方法。根据服务器的不同,如果WHERE子句只包含主键字段,则删除操作可能会快得多。
发布于 2012-09-27 17:40:22
该声明应为:
Delete from table where id between 1 and 5000如果您有一个条件,在大多数情况下,您应该能够构建WHERE语句。请勿尝试使用IN单独列出5000个IN。你会遇到各种各样的限制。
如果无法区分删除的标准,则可以在表或CSV中列出单个it,这两种方法都适用于IN。
https://stackoverflow.com/questions/12612010
复制相似问题