Следующий запрос работает, но он очень медленный для 10 записей (2 секунды). Профилирование говорит о создании таблицы tmp, но я не уверен, почему.
По сути, я присоединяюсь к текущему пользователю, к группам acl, чтобы получить все группы, в которые он входит, затем присоединяет группы к компаниям, получает все компании, в которых они находятся, затем присоединяет компании к заказам чтобы получить все заказы ..
Если я уберу эту строку
ORDER BY orders.created_on DESC
затем запрос выполняется за 0,06 с (более приемлемо) ..
Помогите, есть идеи как оптимизировать? Большое спасибо:)
SELECT
orders.uuid,
companies.name as company_name
FROM
users u
JOIN
users_acl_groups g on u.uuid = g.user_uuid
JOIN
users_acl acl on (acl.user_uuid = u.uuid or acl.group_uuid = g.group_uuid)
JOIN
companies on acl.item_uuid = companies.uuid
JOIN
orders on companies.uuid = orders.company_uuid
WHERE
u.uuid = 'DDEC8073-5056-C000-01ED583A51CBCA32' and orders.status <> ''
ORDER BY orders.created_on DESC
limit 0, 10;
ОБНОВЛЕНИЕ, объяснение запроса ..
1 ПРОСТЫЕ заказы ВСЕ 9403 Использование
временный; Использование сортировки файлов
1 ПРОСТО acl ALL 1859 Использование где;
Использование буфера соединения
1 SIMPLE g ALL 2005 Использование где;
Использование буфера соединения
1 ПРОСТЫЕ компании eq_ref ПЕРВИЧНЫЙ ПЕРВИЧНЫЙ 52 table.orders.company_uuid 1
1 ПРОСТО u ALL 33595 Использование где;
Четкая; Использование буфера соединения