Cette situation spécifique peut sembler un peu stupide, mais je veux juste savoir comment je devrais le résoudre: il y a une table (écoles) et dans ce tableau, vous trouvez tous les étudiants avec leur identifiant d'école. La commande est complètement aléatoire, mais avec une instruction SELECT, vous pouvez trier.
SELECT * FROM (SELECT * FROM `schools` WHERE `school_id` = 33) AS a WHERE a.name LIKE '%max%';
3 Réponses :
Vous pouvez utiliser le expliquer code>
mot clé pour voir exactement comment chaque requête est exécutée. P>
Je dirais que c'est presque un certain que ces deux exécutaient de manière identique. P>
L'optimiseur de requête choisira probablement le même plan pour les deux requêtes. Si vous voulez savoir avec certitude, examinez le plan d'exécution lorsque vous exécutez chaque requête. P>
La requête sans la sous-requête est probablement plus efficace dans MySQL:
SELECT * FROM `schools` WHERE `school_id` = 33 and `name` LIKE '%max%';
Je dirais que ce dernier ajoute un niveau d'indirection inutile que pourrait * i> faire mal aux performances, et vous seriez à la miséricorde de l'optimiseur. Je ne le rééchapperais que la deuxième façon si elle a prouvé que des avantages de performance significatifs de forcer l'évaluation, mais même dans ce cas seulement après avoir examiné des éléments comme des indices d'index. * exemple, si vous échangez les conditions dans ce dernier, vous pourriez finir par forcer MySQL pour ignorer un index sur l'école_id. i>
Vous pouvez tester cela plus vite que nous demander