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.