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!