Commit Graph

3 Commits

Author SHA1 Message Date
Tim Hunt 482ca72089 MDL-47426 assign local roles: rewrite query for better performance.
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.
2014-10-02 17:10:40 +01:00
Petr Škoda 5089cca0b4 MDL-40337 use full frankenstyle in get_string() calls 2013-06-27 22:17:46 +02:00
Petr Škoda bc7b53fb49 MDL-40337 use class loader for admin/roles/* 2013-06-27 22:17:44 +02:00