У меня есть следующий запрос, выполнение которого занимает больше минуты, как я могу его оптимизировать. Это медленно из-за порядка по описанию o.id, если я удалю его, запрос выполнит его несколько мс.
select o.*, per.email, p.name
from order o
inner join product p
on o.product_id=p.id
inner join person per
on o.person_id=per.id
order by o.id desc
limit 100;
Ниже приведен результат объяснения
1 SIMPLE p index PRIMARY FK2EFC6C1E5DE2FC 8 NULL 6886 Using index; Using temporary; Using filesort
1 SIMPLE o ref FK67E9050121C383DB,FK67E90501FC44A17C FK67E90501FC44A17C 8 dev.p.id 58
1 SIMPLE per eq_ref PRIMARY PRIMARY 8 dev.o.person_id 1 Using index
Все таблицы являются InnoDB, а соединения выполняются по первичным и внешним ключам. Кроме этого индексы находятся в столбце email в столбце Person и столбце status в Order.
Количество записей в каждой таблице
Человек: 1 300 000 Товар: 7 000 Заказ: 70 000