MDL-68183 auth: Fix the performance of get_complete_user_data search
authorDavid Mudrák <david@moodle.com>
Tue, 17 Mar 2020 13:44:50 +0000 (14:44 +0100)
committerDavid Mudrák <david@moodle.com>
Tue, 17 Mar 2020 13:52:32 +0000 (14:52 +0100)
commit2d60593892dff6b4b02d61fbec3219f28d78a2c6
treedef6bc3b174f9aa915155ebc7c1d85aae92f99d8
parent3621b497d2ec024c61e5634de6a175c03e85c22c
MDL-68183 auth: Fix the performance of get_complete_user_data search

When searching for the user by a case-insensitive field (email address
is the only one supported now), the performance may be very poor as the
DB cannot use the index due to the LOWER() operation and the full
sequential scan of all the user records is performed. On some DBs such
as MySQL, this can be significantly improved by pre-filtering the users
with accent-insensitive search.

So we first perform accent-insensitive search for potential candidates
in a subselect, which can use the index. Only then we perform the
additional accent-sensitive search on this limited set or records.
lib/moodlelib.php