0
votes

Devrais-je plutôt utiliser une sous-requête ou une combinaison où?

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%';


2 commentaires

Je dirais que ce dernier ajoute un niveau d'indirection inutile que pourrait * 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.


Vous pouvez tester cela plus vite que nous demander


3 Réponses :


2
votes

Vous pouvez utiliser le expliquer mot clé pour voir exactement comment chaque requête est exécutée.

Je dirais que c'est presque un certain que ces deux exécutaient de manière identique.


0 commentaires

1
votes

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.


0 commentaires

1
votes

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%';


0 commentaires