【发布时间】:2018-11-29 17:39:16
【问题描述】:
在我的 Access 数据库中(在 C# 应用程序中),我最初有这个查询:
DELETE
FROM ModelRule
WHERE RuleID NOT IN (SELECT RuleID FROM Rule)
使用 700K 规则,这速度慢得令人无法忍受。所以我求助于 C# 循环:
foreach ( DataRow row in dtRulesToPurge.Rows ) {
[pseudocode:] "DELETE FROM ModelRule WHERE RuleID = " + row["ID"];
[pseudocode:] Give user feedback/progressbar/counts
}
foreach 似乎更快,但主要是(至少)我可以通过进度条给用户反馈。这种方法需要几分钟。相关子查询需要至少几分钟,但我总是在它真正完成之前放弃并杀死它 - 我怀疑它需要更长的时间。
但我心里有点痒,说可能有一种快速的方法可以通过更好的子查询或某种连接等来执行这些删除,这将比我上面的两种方法中的任何一种都好得多。
很想听听你的想法。
【问题讨论】:
-
您可能想尝试左外连接。我不认为它更快,但你可以试试:code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b