Mysql
 sql >> Base de données >  >> RDS >> Mysql

Django admin MySQL lent INNER JOIN

J'ai implémenté un correctif pour INNER JOIN pour Django ORM, il utilisera STRAIGHT_JOIN en cas de commande avec INNER JOINs. J'ai parlé aux core-devs de Django et nous avons décidé de faire cela comme un backend séparé pour l'instant. Vous pouvez donc le vérifier ici :https://pypi.python.org/pypi /django-mysql-fix

Cependant, il existe une autre solution de contournement. Utilisez un extrait de la réponse de James, mais remplacez select_related par :

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

Il annulera INNER JOIN et utilisera 4 requêtes distinctes :1 pour récupérer les voitures et 3 autres avec car_id EN (...).

MISE À JOUR : J'ai trouvé une autre solution de contournement. Une fois que vous avez spécifié null=True dans votre champ ForeignKey, Django utilisera les LEFT OUTER JOIN au lieu de INNER JOIN. LEFT OUTER JOIN fonctionne sans problèmes de performances dans ce cas, mais vous pouvez rencontrer d'autres problèmes dont je n'ai pas encore connaissance.