Maison >base de données >tutoriel mysql >Comment sélectionner efficacement des lignes d'une table qui ne sont pas présentes dans une autre table ?

Comment sélectionner efficacement des lignes d'une table qui ne sont pas présentes dans une autre table ?

DDD
DDDoriginal
2024-10-26 11:49:29792parcourir

 How to Efficiently Select Rows from One Table that Are Not Present in Another Table?

MySQL Sélection de lignes non présentes dans une autre table

Pour obtenir toutes les lignes qui existent dans la table A mais pas dans la table B tout en partageant le primaire commun clés, quelques méthodes sont disponibles, avec des implications variables en termes de performances.

Utilisation d'une sous-requête avec NOT EXISTS :

Votre approche initiale avec une sous-requête utilisant NOT EXISTS est une solution viable. option, mais peut être relativement lente, en particulier avec des ensembles de données plus volumineux.

Utilisation d'une jointure à gauche :

Comme vous l'avez découvert, une jointure à gauche peut être plus rapide. Lorsque vous joignez le tableau A au tableau B sur la colonne partagée, les lignes du tableau A qui ne correspondent à aucune ligne du tableau B auront des valeurs NULL dans la colonne de jointure. Le filtrage de ces valeurs NULL isole efficacement les lignes souhaitées.

Exemple de code :

<code class="sql">SELECT *
FROM A
LEFT JOIN B ON A.x = B.y
WHERE B.y IS NULL;</code>

Conseils supplémentaires :

  • Assurez-vous d'une indexation appropriée sur les colonnes de jointure pour les deux tables.
  • Utilisez un index de couverture sur la table B pour réduire le nombre de lectures sur le disque.
  • Envisagez d'utiliser une requête UNION avec un filtre négatif pour exclure explicitement les lignes du tableau B.

Conclusion générale :

Bien que la méthode de jointure gauche surpasse généralement l'approche de sous-requête, la solution optimale peut varier en fonction de l’ensemble de données et le schéma spécifiques. L'expérimentation et les tests de performances sont recommandés pour déterminer l'approche la plus efficace dans chaque situation.

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