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.