C# 相关删除性能问题

C# 相关删除性能问题,c#,sql,ms-access,C#,Sql,Ms Access,在我的Access DB(在C#应用程序中)中,我最初有以下查询: DELETE FROM ModelRule WHERE RuleID NOT IN (SELECT RuleID FROM Rule) 有了700K的规则,这是令人无法忍受的缓慢。所以我求助于C#looping: foreach的foreach似乎更快,但主要(至少)我可以通过进度条给用户反馈。这种方法需要几分钟的时间。相关子查询至少需要几分钟的时间,但我总是在它真正完成之前放弃并杀死它——我怀疑它需要更长的时间 但我心里

在我的Access DB(在C#应用程序中)中,我最初有以下查询:

DELETE 
FROM ModelRule 
WHERE RuleID NOT IN (SELECT RuleID FROM Rule)
有了700K的规则,这是令人无法忍受的缓慢。所以我求助于C#looping:

foreach的
foreach
似乎更快,但主要(至少)我可以通过进度条给用户反馈。这种方法需要几分钟的时间。相关子查询至少需要几分钟的时间,但我总是在它真正完成之前放弃并杀死它——我怀疑它需要更长的时间

但我心里有一点发痒,那就是可能有一种快速的方法可以通过更好的子查询或某种连接等来完成这些删除,这比我上面的两种方法都要好得多


我很想知道你的想法。

我宁愿
不存在,所以我会写:

DELETE FROM ModelRule 
WHERE NOT EXISTS (SELECT 1
                  FROM Rule
                  WHERE ModelRule.RuleID  = RULE.RuleID
                 );

然后,为了提高性能,您需要一个关于
规则(RuleID)
的索引,我希望
不存在,所以我要写:

DELETE FROM ModelRule 
WHERE NOT EXISTS (SELECT 1
                  FROM Rule
                  WHERE ModelRule.RuleID  = RULE.RuleID
                 );

然后,为了提高性能,您需要在
规则(RuleID)

上建立索引。您可能需要尝试左外部联接。我不认为它更快,但您可以尝试:您可能想尝试左外连接。我不认为它更快,但您可以尝试: