Mysql
 sql >> Database >  >> RDS >> Mysql

Django admin MySQL lento INNER JOIN

Ho implementato una correzione per INNER JOIN per Django ORM, utilizzerà STRAIGHT_JOIN in caso di ordini con INNER JOIN. Ho parlato con i core-dev di Django e per ora abbiamo deciso di farlo come un backend separato. Quindi puoi verificarlo qui:https://pypi.python.org/pypi /django-mysql-fix

Tuttavia, esiste un'altra soluzione. Usa uno snippet dalla risposta di James, ma sostituisci select_related con:

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

Cancellerà INNER JOIN e utilizzerà 4 query separate:1 per recuperare le auto e altre 3 con car_id DENTRO (...).

AGGIORNAMENTO: Ho trovato un'altra soluzione. Dopo aver specificato null=True nel campo ForeignKey, Django utilizzerà LEFT OUTER JOIN invece di INNER JOIN. LEFT OUTER JOIN funziona senza problemi di prestazioni in questo caso, ma potresti dover affrontare altri problemi di cui non sono ancora a conoscenza.