Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je optimiser cette requête, prend plus d'une minute à exécuter

Le planificateur, très probablement, n'utilise pas la limit indice pour éliminer les lignes de la table de commande avant la jointure. Le serveur doit donc effectuer la jointure pour toutes les lignes, puis n'en renvoyer que quelques-unes.

Essayez ceci :

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 :Cela ne fonctionnera que s'il existe une contrainte garantissant que les lignes correspondantes sont présentes dans les tables Product et Person.