ORDER BY замедляет MySQL запрос

Mazz спросил: 03 ноября 2018 в 09:26 в: mysql

У нас есть один запрос, который замедляет весь наш процесс.

Этот запрос занимает около 10 seconds

SELECT tbl_organisation.*,  
(
    SELECT count(*)
    FROM tbl_user_organisation 
    WHERE tbl_user_organisation.organisation_id = tbl_organisation.id
) as members 
FROM tbl_organisation
WHERE tbl_organisation.archived = 0 
AND tbl_organisation.name LIKE "%name%"  
ORDER BY members
LIMIT 10 OFFSET 0;

без ORDER BY это займет всего 76ms

SELECT tbl_organisation.*,  
(
    SELECT count(*)
    FROM tbl_user_organisation 
    WHERE tbl_user_organisation.organisation_id = tbl_organisation.id
) as members 
FROM tbl_organisation
WHERE tbl_organisation.archived = 0 
AND tbl_organisation.name LIKE "%name%"  
LIMIT 10 OFFSET 0;

Я знаю, что вторая просто занимает первые 10 строк и заканчивается, а первая должна отсортировать сначала весь набор данных, прежде чем выбрать 10 строк.

Теперь возникает вопрос: возможно ли сделать этот запрос быстрее? И если да, то как?

Поскольку members подсчитывается динамически, мы не можем добавить INDEX для ускорения запросов, как предложено в других решениях.

EXPLAIN медленного запроса

0 ответов