Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso otimizar esta consulta, leva mais de um minuto para executar


O planejador, provavelmente, não está usando o limit dica para eliminar linhas da tabela de pedidos antes da junção. Portanto, o servidor precisa fazer a junção de todas as linhas e retornar apenas algumas.

Tente isto:
select o.* from
(select * order order by id desc limit 100) 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;

EDIT:Isso funcionará apenas se houver uma restrição garantindo que as linhas correspondentes estejam presentes nas tabelas Product e Person.