sql >> Base de Datos >  >> RDS >> Mysql

Django administrador MySQL lento INNER JOIN

Implementé una solución para INNER JOIN para Django ORM, usará STRAIGHT_JOIN en caso de ordenar con INNER JOIN. Hablé con Django core-devs y decidimos hacer esto como un backend separado por ahora. Así que puedes comprobarlo aquí:https://pypi.python.org/pypi /Django-mysql-fix

Sin embargo, hay otra solución alternativa. Use un fragmento de la respuesta de James, pero reemplace select_related con:

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

Cancelará INNER JOIN y usará 4 consultas separadas:1 para buscar autos y otras 3 con car_id EN (...).

ACTUALIZACIÓN: He encontrado una solución más. Una vez que especifique null=True en su campo ForeignKey, Django usará LEFT OUTER JOIN en lugar de INNER JOIN. LEFT OUTER JOIN funciona sin problemas de rendimiento en este caso, pero es posible que enfrente otros problemas de los que aún no estoy al tanto.