En la primera consulta, mysql debe seleccionar un subconjunto de mdl_enrol
tabla y completa mdl_user_enrolments
y mdl_userdata
en la memoria. Así que selecciona una gran cantidad de datos en la memoria. Después de hacer eso, une los datos. Si no hay suficiente memoria para colocar todos los datos hasta que se unan y se envíen de vuelta al cliente, se crea una tabla temporal en el disco duro. Lo más probable es que el optimizador mysql no sea lo suficientemente bueno como para corregir su error e intentar mejorar el plan de ejecución. Por eso es lento.
Mientras que para la segunda consulta, mysql sabe exactamente qué necesita seleccionar y solo selecciona la pequeña cantidad de datos requeridos. En este escenario, es posible usar índices (suponiendo que se hayan creado todos los índices necesarios). Así que es rápido.