Atualmente, estou comparando dois conjuntos de dados, que contêm um único StoreKey/ProductKey
combinações .
O 1º conjunto de dados possui StoreKey/ProductKey
combinações exclusivas para vendas entre o início de janeiro de 2012 e o final de maio de 2014 (resultado = 450 mil linhas). O segundo conjunto de dados possui o únicoStoreKey/ProductKey
combinações , para vendas iniciadas em junho de 2014, até hoje (resultado = 190 mil linhas).
Estou procurando encontrar o StoreKey/ProductKey
combinações que estão no 2º set, mas não no 1º set - ou seja, novos produtos vendidos a partir do início de junho.
Até agora, eu coloquei os dois conjuntos de dados em tabelas temporárias, criei índices para ambas as tabelas nas duas chaves e usei o EXCEPT
instrução para encontrar itens exclusivos.
Qual é a maneira mais eficiente de comparar conjuntos de dados tão grandes? Existe uma maneira mais eficiente de fazer esse tipo de comparação grande?
fonte
TransactionDateKey
seja a coluna usada para filtrar o período. Nesse caso, o índice agrupado naTransactionDateKey
,StoreKey
eProductKey
é perfeito.Se você estiver familiarizado com algoritmos (complexidade Big-O), realizar essa comparação é, na melhor das hipóteses, O (n log (n)). O algoritmo mais eficiente classificará os dois conjuntos de dados e fará uma mesclagem executada em paralelo para encontrar chaves correspondentes (ou sem correspondência). A maioria dos otimizadores de RDBMS fará isso automaticamente quando você estiver usando
EXCEPT
ouMINUS
. Seu plano de explicação irá confirmar ou desconfirmar. Se você vir loops aninhados, estará executando O (n ^ 2), não tão eficiente.fonte