【发布时间】:2009-01-20 15:09:44
【问题描述】:
我每天都会收到大量当前帐号,并将它们存储在数据库中。我的任务是从每个文件中找到添加和释放的帐户。现在,我有 4 个 SQL 表(AccountsCurrent、AccountsNew、AccountsAdded、AccountsRemoved)。当我收到一个文件时,我会将它完全添加到 AccountsNew。然后运行以下查询以查找我们添加和删除的内容。
INSERT AccountsAdded(AccountNum, Name) SELECT AccountNum, Name FROM AccountsNew WHERE AccountNumber not in (SELECT AccountNum FROM AccountsCurrent)
INSERT AccountsRemoved(AccountNum, Name) SELECT AccountNum, Name FROM AccountsCurrent WHERE AccountNumber not in (SELECT AccountNum FROM AccountsNew)
TRUNCATE TABLE AccountsCurrent
INSERT AccountsCurrent(AccountNum, Name) SELECT AccountNum, Name FROM AccountsNew
TRUNCATE TABLE AccountsNew
目前,我正在区分大约 250,000 个帐户,但这会继续增长。这是最好的方法吗,您还有其他想法吗?
编辑: 这是一个 MSSQL 2000 数据库。我正在使用 c# 来处理文件。
我关注的唯一数据是在上一个文件和当前文件之间添加和删除的帐户。 AccountsCurrent,仅用于确定添加或删除了哪些帐户。
【问题讨论】:
-
你最好去掉c#标签,这是一个直接的sql问题。
-
另外,你能说一下你使用的是什么数据库吗?可能有 db 特定的优化。
-
另外,不要使用IN语句,左外连接检查null,这样会快很多。