Actualmente, estoy comparando dos conjuntos de datos que contienen StoreKey/ProductKey
combinaciones únicas .
El primer conjunto de datos tiene las StoreKey/ProductKey
combinaciones únicas para las ventas entre principios de enero de 2012 y finales de mayo de 2014 (resultado = 450 mil líneas). El segundo conjunto de datos tiene StoreKey/ProductKey
combinaciones únicas , para ventas que comienzan en junio de 2014, hasta hoy (resultado = 190,000 líneas).
Estoy buscando encontrar las StoreKey/ProductKey
combinaciones que están en el segundo set, pero no en el primer set, es decir, nuevos productos vendidos a principios de junio.
Hasta ahora, volqué los dos conjuntos de datos en tablas temporales, creé índices para ambas tablas en ambas claves y utilicé la EXCEPT
declaración para encontrar elementos únicos.
¿Cuál es la forma más eficiente de comparar conjuntos de datos tan grandes? ¿Existe una forma más eficiente de hacer este tipo de comparación grande?
fuente
TransactionDateKey
es la columna utilizada para filtrar el período de tiempo. En ese caso el índice agrupado enTransactionDateKey
,StoreKey
yProductKey
es perfecto.Si está familiarizado con los algoritmos (complejidad Big-O), realizar esta comparación es, en el mejor de los casos, O (n log (n)). El algoritmo más eficiente clasificará ambos conjuntos de datos y luego los combinará en paralelo para encontrar claves coincidentes (o no coincidentes). La mayoría de los optimizadores RDBMS lo harán automáticamente cuando use
EXCEPT
oMINUS
. Su plan de explicación confirmará o desconfirmará. Si ve bucles anidados, está haciendo O (n ^ 2), no tan eficiente.fuente