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

Django-Administrator MySQL langsamer INNER JOIN

Ich habe einen Fix für INNER JOIN für Django ORM implementiert, es wird STRAIGHT_JOIN verwenden, wenn mit INNER JOINs bestellt wird. Ich habe mit Django Core-Entwicklern gesprochen und wir haben uns entschieden, dies vorerst als separates Backend zu tun. Sie können es sich also hier ansehen:https://pypi.python.org/pypi /django-mysql-fix

Es gibt jedoch eine andere Problemumgehung. Verwenden Sie einen Ausschnitt aus James' Antwort, aber ersetzen Sie select_related durch:

qs = qs.select_related('').prefetch_related('wheel', 'dealer', 'category')

Es bricht INNER JOIN ab und verwendet 4 separate Abfragen:1 zum Abrufen von Autos und 3 weitere mit car_id EIN (...).

AKTUALISIERUNG: Ich habe noch einen Workaround gefunden. Sobald Sie null=True in Ihrem ForeignKey-Feld angeben, verwendet Django LEFT OUTER JOINs anstelle von INNER JOIN. LEFT OUTER JOIN funktioniert in diesem Fall ohne Leistungsprobleme, aber Sie können auf andere Probleme stoßen, die mir noch nicht bekannt sind.