Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich diese Abfrage optimieren, die Ausführung dauert mehr als eine Minute

Der Planer verwendet höchstwahrscheinlich nicht das limit Hinweis zum Entfernen von Zeilen aus der Auftragstabelle vor dem Join. Also muss der Server den Join für alle Zeilen machen und dann nur ein paar zurückgeben.

Versuchen Sie Folgendes:

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;

BEARBEITEN:Dies funktioniert nur, wenn es eine Einschränkung gibt, die garantiert, dass entsprechende Zeilen in den Produkt- und Personentabellen vorhanden sind.