Maison >base de données >tutoriel mysql >EXISTS vs IN dans les sous-requêtes MySQL : laquelle est la plus performante ?
Sous-requêtes avec EXISTS vs IN dans MySQL : une comparaison des performances
Les sous-requêtes jouent un rôle crucial dans l'extraction de données spécifiques d'une base de données. Deux méthodes de sous-requête courantes sont EXISTS et IN. Bien que les deux puissent obtenir des résultats similaires, ils présentent des caractéristiques de performances distinctes.
Considérez les deux requêtes suivantes :
Méthode 1 :
SELECT * FROM tracker WHERE reservation_id IN ( SELECT reservation_id FROM tracker GROUP BY reservation_id HAVING ( method = 1 AND type = 0 AND Count(*) > 1 ) OR ( method = 1 AND type = 1 AND Count(*) > 1 ) OR ( method = 2 AND type = 2 AND Count(*) > 0 ) OR ( method = 3 AND type = 0 AND Count(*) > 0 ) OR ( method = 3 AND type = 1 AND Count(*) > 1 ) OR ( method = 3 AND type = 3 AND Count(*) > 0 ) );
Méthode 2 :
SELECT * FROM tracker t WHERE EXISTS ( SELECT reservation_id FROM tracker t3 WHERE t3.reservation_id = t.reservation_id GROUP BY reservation_id HAVING ( METHOD = 1 AND TYPE = 0 AND COUNT(*) > 1 ) OR ( METHOD = 1 AND TYPE = 1 AND COUNT(*) > 1 ) OR ( METHOD = 2 AND TYPE = 2 AND COUNT(*) > 0 ) OR ( METHOD = 3 AND TYPE = 0 AND COUNT(*) > 0 ) OR ( METHOD = 3 AND TYPE = 1 AND COUNT(*) > 1 ) OR ( METHOD = 3 AND TYPE = 3 AND COUNT(*) > 0 ) );
En termes de performances, méthode 2 surpasse considérablement la méthode 1, prenant moins d'une seconde à exécuter, contre plus de 10 secondes. Pour comprendre la raison de cet écart, nous devons approfondir le fonctionnement interne de chaque méthode.
EXISTE vs IN : différences clés
Considérations relatives aux performances
Conclusion
En général, EXISTS est recommandé lorsque la sous-requête devrait renvoyer un grand nombre de lignes ou si des valeurs nulles sont impliquées. Pour les petites sous-requêtes, IN peut être plus performant. Il est toujours conseillé d'utiliser un plan d'explication pour déterminer la meilleure approche pour une requête spécifique.
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!