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.