In de eerste query moet mysql een subset selecteren uit mdl_enrol
tabel en voltooi mdl_user_enrolments
en mdl_userdata
in het geheugen. Je selecteert dus veel data in het geheugen. Nadat u dat hebt gedaan, voegt u zich bij de gegevens. Als er niet genoeg geheugen is om alle gegevens op te slaan totdat deze zijn samengevoegd en teruggestuurd naar de client, wordt een tijdelijke tabel op de harde schijf gemaakt. Hoogstwaarschijnlijk is mysql-optimizer niet cool genoeg om uw fout te herstellen en het uitvoeringsplan te verbeteren. Daarom is het traag.
Terwijl voor de tweede query mysql weet wat het precies moet selecteren en alleen de kleine hoeveelheid vereiste gegevens selecteert. In dit scenario is het mogelijk om indexen te gebruiken (ervan uitgaande dat alle benodigde indexen zijn aangemaakt). Het is dus snel.