Maison  >  Article  >  base de données  >  Quelle approche est la meilleure pour sélectionner les lignes présentes dans une table mais pas dans une autre : \"NOT EXISTS\" ou \"LEFT JOIN\" ?

Quelle approche est la meilleure pour sélectionner les lignes présentes dans une table mais pas dans une autre : \"NOT EXISTS\" ou \"LEFT JOIN\" ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 12:01:02182parcourir

Which Approach is Best for Selecting Rows Present in One Table But Not Another:

Optimisation de "Mysql sélectionne où pas dans la table" pour une récupération efficace des données

Lorsque vous traitez deux tables (A et B) avec un primaire identique clés, la tâche de sélectionner les lignes présentes dans A mais absentes dans B se pose couramment. L'approche standard, utilisant la clause "NOT EXISTS", souffre de limitations de performances.

Not Exists vs. Left Join

La requête "NOT EXISTS" que vous avez mentionnée vérifie pour l'absence de lignes correspondantes dans B pour chaque ligne dans A. Ce processus, connu sous le nom d'anti-jointure, peut être inefficace pour les grands ensembles de données. En revanche, votre approche de jointure gauche suggérée recherche les valeurs nulles dans la colonne B.y pour chaque ligne de A. Cela peut être une solution plus efficace.

Expression de requête améliorée

Cependant, une amélioration mineure peut être apportée à votre requête de jointure gauche :

SELECT A.*    
FROM A LEFT JOIN B ON A.x = B.y
WHERE B.y IS NULL

En sélectionnant explicitement uniquement les colonnes de la table A (A.*), vous optimisez la requête en récupérant uniquement les éléments nécessaires data.

Conclusion

Bien que la clause "NOT EXISTS" reste une option viable pour les petits ensembles de données, l'approche de jointure à gauche avec l'expression de requête améliorée offre de meilleures performances pour les plus grands ensembles de données. volumes de données. Cela vous permet de récupérer efficacement les lignes qui existent dans le tableau A mais pas dans le tableau B.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn