Derzeit vergleiche ich zwei Datensätze, die eindeutige StoreKey/ProductKey
Kombinationen enthalten .
Der 1. Datensatz enthält die eindeutigen StoreKey/ProductKey
Kombinationen für Verkäufe zwischen Anfang Januar 2012 und Ende Mai 2014 (Ergebnis = 450.000 Zeilen). Der 2. Datensatz enthält die eindeutigen StoreKey/ProductKey
Kombinationen für den Verkauf ab Juni 2014 bis heute (Ergebnis = 190.000 Zeilen).
Ich suche die StoreKey/ProductKey
Kombinationen, die im 2. Satz enthalten sind, aber nicht im 1. Satz - dh neue Produkte, die ab Anfang Juni verkauft werden.
Bisher habe ich die beiden Datensätze in temporären Tabellen abgelegt, für beide Tabellen Indizes für beide Schlüssel erstellt und mithilfe der EXCEPT
Anweisung nach eindeutigen Elementen gesucht.
Wie lassen sich so große Datenmengen am effizientesten vergleichen? Gibt es eine effizientere Methode für diesen großen Vergleich?
quelle
TransactionDateKey
die Spalte zum Filtern des Zeitraums verwendet wird. In diesem Fall wird der Clustered - Index aufTransactionDateKey
,StoreKey
undProductKey
ist perfekt.Wenn Sie mit Algorithmen (Big-O-Komplexität) vertraut sind, ist die Durchführung dieses Vergleichs bestenfalls O (n log (n)). Der effizienteste Algorithmus sortiert beide Datensätze und führt sie dann parallel zusammen, um übereinstimmende (oder nicht übereinstimmende) Schlüssel zu finden. Die meisten RDBMS-Optimierer erledigen dies automatisch für Sie, wenn Sie
EXCEPT
oder verwendenMINUS
. Ihr EXPLAIN-Plan wird bestätigt oder nicht bestätigt. Wenn Sie verschachtelte Schleifen sehen, tun Sie O (n ^ 2), nicht so effizient.quelle