Actuellement, je compare deux ensembles de données, qui contiennent des StoreKey/ProductKey
combinaisons uniques .
Le premier ensemble de données contient les StoreKey/ProductKey
combinaisons uniques de ventes entre début janvier 2012 et fin mai 2014 (résultat = 450 000 lignes). Le deuxième ensemble de données a les StoreKey/ProductKey
combinaisons uniques , pour des ventes débutant juin 2014, jusqu'à aujourd'hui (résultat = 190K lignes).
Je cherche les StoreKey/ProductKey
combinaisons qui se trouvent dans le 2ème set, mais pas dans le 1er set - c'est-à-dire les nouveaux produits vendus à partir de début juin.
Jusqu'à présent, j'ai vidé les deux ensembles de données dans des tables temporaires, créé des index pour les deux tables sur les deux clés et utilisé l' EXCEPT
instruction pour trouver des éléments uniques.
Quelle est la manière la plus efficace de comparer des ensembles de données aussi volumineux? Existe-t-il un moyen plus efficace de faire ce type de comparaison à grande échelle?
la source
TransactionDateKey
c'est la colonne utilisée pour filtrer la période. Dans ce cas, l'index clusterisé surTransactionDateKey
,StoreKey
etProductKey
est parfait.Si vous êtes familier avec les algorithmes (complexité Big-O), effectuer cette comparaison est au mieux O (n log (n)). L'algorithme le plus efficace triera les deux ensembles de données, puis effectuera une analyse fusionnée en parallèle pour trouver les clés correspondantes (ou inégalées). La plupart des optimiseurs RDBMS le feront automatiquement pour vous lorsque vous utilisez
EXCEPT
ouMINUS
. Votre plan d'explication confirmera ou infirmera. Si vous voyez des boucles imbriquées, vous faites O (n ^ 2), pas aussi efficace.la source