Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso ottimizzare questa query, l'esecuzione richiede più di un minuto

Il pianificatore, molto probabilmente, non sta usando il limit suggerimento per eliminare le righe dalla tabella degli ordini prima del join. Quindi il server deve eseguire il join per tutte le righe e quindi restituirne solo alcune.

Prova questo:

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:funzionerà solo se esiste un vincolo che garantisce che le righe corrispondenti siano presenti nelle tabelle Prodotto e Persona.