我每天都會收到大量當前帳號,並將它們存儲在數據庫中。我的任務是從每個文件中查找添加和發佈的帳戶。現在,我有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問題。 – 2009-01-20 15:17:00
另外,你可以說你正在使用什麼數據庫?有可能數據庫特定的優化。 – 2009-01-20 15:19:23
另外,不要使用IN語句,留下外連接並檢查null,這將會快得多。 – 2009-01-20 20:16:33