Mysql
 sql >> Base de données >  >> RDS >> Mysql

Performances des sous-requêtes MySQL simples

Dans la première requête, mysql doit sélectionner un sous-ensemble de mdl_enrol tableau et compléter mdl_user_enrolments et mdl_userdata dans la mémoire. Vous sélectionnez donc beaucoup de données en mémoire. Une fois que vous avez fait cela, vous joignez les données. S'il n'y a pas assez de mémoire pour mettre toutes les données jusqu'à ce qu'elles soient jointes et renvoyées au client, une table temporaire sur le disque dur est créée. L'optimiseur mysql n'est probablement pas assez cool pour corriger votre erreur et essayer d'améliorer le plan d'exécution. C'est pourquoi c'est lent.

Alors que pour la deuxième requête, mysql sait exactement ce qu'il doit sélectionner et ne sélectionne que la petite quantité de données requises. Dans ce scénario, il est possible d'utiliser des index (en supposant que tous les index nécessaires ont été créés). Donc c'est rapide.