Question

Actuellement, je suis à la comparaison de deux ensembles de données, qui contiennent unique StoreKey/ProductKey les combinaisons.

Le 1er ensemble de données, l'unique StoreKey/ProductKey des combinaisons pour les ventes entre début janvier 2012 et fin Mai 2014 (résultat = 450K lignes).Le 2ème jeu de données est unique StoreKey/ProductKey combinaisons, pour les ventes commencent en juin 2014, jusqu'à aujourd'hui (résultat = 190K lignes).

Je suis à la recherche pour trouver le StoreKey/ProductKey des combinaisons qui sont dans le 2e set, mais pas dans le 1er set - c'est à direles nouveaux produits vendus depuis le début du mois de juin.

Jusqu'à maintenant, j'ai déchargé les deux ensembles de données dans des tables temporaires, créé des index pour les tables sur les deux touches, et utilisé le EXCEPT déclaration de trouver des objets uniques.

Quel est le moyen le plus efficace de la comparaison de ces grands ensembles de données?Est-il un moyen plus efficace de faire ce type de grandes comparaison?

Était-ce utile?

La solution

À l'aide de l'EXCEPTION est à mon avis le moyen d'aller ici, mais vous pourriez vouloir reconsidérer l'utilisation de la table temporaire.Ce faisant, vous êtes effectivement la duplication de vos données dans la mémoire, qui vont vous ralentir.Si l'index vous avez besoin d'exister sur les tables source (comme je pense), il suffit de comparer les appropriée SÉLECTIONNE:

SELECT StoreKey,ProductKey FROM table WHERE sales BETWEEN date1 AND date2
EXCEPT
SELECT StoreKey,ProductKey FROM table WHERE sales BETWEEN date3 AND date4

Autres conseils

Si vous êtes familier avec des algorithmes (Big-O de la complexité), l'exécution de cette comparaison est le meilleur en O(n log(n)).Le plus efficace algorithme de tri les deux ensembles de données, puis de faire une fusion de courir vers le bas, en parallèle à trouver la correspondance (ou erroné) de la télécommande.La plupart des SGBDR optimiseurs le fera automatiquement pour vous lorsque vous utilisez EXCEPT ou MINUS.Votre plan d'expliquer permettra de confirmer ou disconfirm.Si vous voyez des boucles imbriquées, vous êtes en train de faire en O(n^2), n'est pas aussi efficace.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top