mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 14:27:22 +01:00
482ca72089
This is an extremely dangerous query, because it includes the user table twice, along-side two other potentially large tables, role_assignments and user_enrolments. The solution is to rewrite the query so that: 1. The subquery is JOINed, not WHERE ... INed. Typically query optimisers handle the JOIN case better. 2. Before the join was role-assignments <-> users <-> subquery. That is, everything was linked to u.id. Now the linking is role-assignments <-> subquery <-> users, so the SELECT DISTINT eu1_u.id FROM {enrolled users} is central. That seems to send a strong hint to the query optimiser about a good order to execute the query.