Trouver la différence entre deux grandes tables PostgreSQL
J'ai deux tables dans Postgres avec juste un de 32 octets de terrain latino (simple hash md5).
Les deux tables ont ~30 000 000 de lignes. Les Tables ont peu de différence (10 à 1 000 lignes sont différentes)
Est-il possible avec Postgres pour trouver une différence entre ces tables, le résultat devrait être de 10 à 1 000 lignes que j'ai décrit ci-dessus.
Ce n'est pas une tâche réelle, je veux juste savoir comment PostgreSQL traite REJOIGNEZ-comme logique.
regarde sur ce Comment comparer deux tables dans postgres et ce afin d'accélérer la diff Comment puis-je accélérer une diff entre les tables?
Donc, avez-vous votre réponse?
Oui: Hadoop....
Donc, avez-vous votre réponse?
Oui: Hadoop....
OriginalL'auteur odiszapc | 2013-03-11
Vous devez vous connecter pour publier un commentaire.
La meilleure option est probablement un
EXISTE
anti-semi-jointure:tbl1
est la table avec les surplus de lignes dans cet exemple:Si vous ne savez pas laquelle le tableau a de l'excédent des lignes ou deux, vous pouvez répéter la requête ci-dessus après le changement de noms de table, ou:
Vue d'ensemble des techniques de base dans un post plus tard:
BTW, il serait beaucoup plus efficace d'utiliser
uuid
des colonnes pour les hachages md5:OriginalL'auteur Erwin Brandstetter
Pour augmenter les réponses existantes-je utiliser le
row()
fonction de la condition de jointure. Cela permet de comparer des lignes entières. E. g. ma requête typique de voir la différence symétrique ressemble à ceciOriginalL'auteur ThomasH
Dans mon expérience, PAS DANS une sous-requête prend un temps très long. Je le ferais avec un inclusive rejoindre:
Et puis faire la même chose dans l'autre sens pour l'autre table.
NOT IN
est différent en principal deNOT EXISTS
.NULL
la manipulation est différente, ce qui faitNOT IN
plus cher.OriginalL'auteur 0xCAFEBABE