Sql-Server
在 SQL 中比較兩個大型數據集的有效方法
目前,我正在比較兩個包含獨特
StoreKey/ProductKey
組合的數據集。第一個數據集具有
StoreKey/ProductKey
2012 年 1 月開始到 2014 年 5 月結束之間的唯一銷售組合(結果 = 450K 行)。第二個數據集具有獨特的StoreKey/ProductKey
組合,從 2014 年 6 月開始銷售,直到今天(結果 = 190K 行)。我正在尋找
StoreKey/ProductKey
第 2 組中的組合,但第 1 組中沒有 - 即從 6 月初開始銷售的新產品。到目前為止,我已經將這兩個數據集轉儲到臨時表中,在兩個鍵上為這兩個表創建索引,並使用該
EXCEPT
語句查找唯一項。比較如此大的數據集最有效的方法是什麼?有沒有更有效的方法來進行這種大型比較?
在我看來,使用 EXCEPT 是最好的方法,但您可能需要重新考慮臨時表的使用。通過這樣做,您可以有效地將數據複製到記憶體中,這會減慢您的速度。如果源表上存在您需要的索引(我懷疑),只需比較適當的 SELECTS:
SELECT StoreKey,ProductKey FROM table WHERE sales BETWEEN date1 AND date2 EXCEPT SELECT StoreKey,ProductKey FROM table WHERE sales BETWEEN date3 AND date4
如果您熟悉算法(Big-O 複雜度),則執行此比較最多為 O(n log(n))。最有效的算法將對兩個數據集進行排序,然後將它們並行合併以找到匹配(或不匹配)的鍵。大多數 RDBMS 優化器會在您使用
EXCEPT
或時自動為您執行此操作MINUS
。您的解釋計劃將確認或不確認。如果你看到嵌套循環,你正在做 O(n^2),效率不高。