Следующий запрос работает, но очень медленный для 10 записей (2 секунды). Профилирование говорит о создании таблицы tmp, но я не уверен, почему.MySQL. Как оптимизировать этот запрос?
В основном, я присоединяюсь к текущему пользователю, к группам 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;
UPDATE, то объяснить запроса ..
1 ПРОСТЫЕ заказы ALL 9403 Использование временно; Использование filesort
1 SIMPLE acl ALL 1859 Использование; Использование буфера объединения
1 ПРОСТОЙ g ВСЕ 2005 Использование где; Использование присоединиться к буферу
1 ПРОСТЫЕ компании eq_ref ОСНОВНОЙ Primary 52 table.orders.company_uuid 1
1 SIMPLE у ВСЕХ 33595 Использование где; Отличный; Использование буфера присоединиться
Изменен ваш заголовок, поскольку угадывает, что он стоил вам нисходящего потока из-за его императивного и требовательного тона, когда ваш вопрос сформулирован красиво. –
Попробуйте использовать тот же запрос с соединением, который применяется в любом столбце, отличном от UID. Попробуйте сделать это с помощью int, float, string, UID и обратите внимание на время. Давайте также знать, если вы найдете какие-либо изменения. –
У вас есть указатель на orders.created_on? Покажите результат на 'EXPLAIN' по вашему запросу. Возможно, вы могли бы воспользоваться другими индексами. Какой 'EXPLAIN' скажет нам. – nos