Obecnie porównuję dwa zestawy danych, które zawierają unikalne StoreKey/ProductKey
kombinacje.
Pierwszy zestaw danych zawiera unikalne StoreKey/ProductKey
kombinacje sprzedaży od początku stycznia 2012 r. Do końca maja 2014 r. (Wynik = 450 tys. Linii). Drugi zestaw danych ma unikatowe StoreKey/ProductKey
kombinacje, dla sprzedaży rozpoczynającej się w czerwcu 2014 r., Do dziś (wynik = 190 tys. Linii).
Szukam StoreKey/ProductKey
kombinacji, które znajdują się w 2. zestawie, ale nie w 1. zestawie, tj. Nowe produkty sprzedawane od początku czerwca.
Do tej pory zrzuciłem dwa zestawy danych do tabel tymczasowych, utworzyłem indeksy dla obu tabel na obu kluczach i użyłem EXCEPT
instrukcji do znalezienia unikalnych elementów.
Jaki jest najbardziej efektywny sposób porównywania tak dużych zestawów danych? Czy istnieje bardziej skuteczny sposób wykonywania tego rodzaju dużych porównań?
źródło
TransactionDateKey
że kolumna służy do filtrowania okresu. W tym przypadku indeks klastraTransactionDateKey
,StoreKey
iProductKey
jest doskonały.Jeśli znasz algorytmy (złożoność Big-O), przeprowadzenie tego porównania jest w najlepszym wypadku O (n log (n)). Najbardziej wydajny algorytm posortuje oba zestawy danych, a następnie połączy je równolegle, aby znaleźć pasujące (lub niedopasowane) klucze. Większość optymalizatorów RDBMS zrobi to automatycznie, gdy używasz
EXCEPT
lubMINUS
. Twój plan wyjaśniania potwierdzi lub odrzuci. Jeśli widzisz zagnieżdżone pętle, robisz O (n ^ 2), nie tak wydajne.źródło