Jeg har implementeret en rettelse til INNER JOIN til Django ORM, den vil bruge STRAIGHT_JOIN i tilfælde af bestilling med INNER JOINs. Jeg talte med Django core-devs, og vi besluttede at gøre dette som en separat backend indtil videre. Så du kan tjekke det ud her:https://pypi.python.org/pypi /django-mysql-fix
Der er dog en anden løsning. Brug et uddrag fra James' svar, men erstat select_related med:
qs = qs.select_related('').prefetch_related('wheel', 'dealer', 'category')
Det vil annullere INNER JOIN og bruge 4 separate forespørgsler:1 til at hente biler og 3 andre med car_id
IN (...).
OPDATERING: Jeg har fundet en løsning mere. Når du har angivet null=True i dit ForeignKey-felt, vil Django bruge LEFT OUTER JOINs i stedet for INNER JOIN. LEFT OUTER JOIN fungerer uden problemer med ydeevnen i dette tilfælde, men du kan støde på andre problemer, som jeg ikke er klar over endnu.