Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Django admin MySQL lento INNER JOIN


Eu implementei uma correção para INNER JOIN para Django ORM, ele usará STRAIGHT_JOIN no caso de pedidos com INNER JOINs. Falei com os desenvolvedores principais do Django e decidimos fazer isso como um backend separado por enquanto. Então você pode conferir aqui:https://pypi.python.org/pypi /django-mysql-fix

No entanto, há uma outra solução alternativa. Use um trecho da resposta de James, mas substitua select_related por:
qs = qs.select_related('').prefetch_related('wheel', 'dealer', 'category')

Ele cancelará o INNER JOIN e usará 4 consultas separadas:1 para buscar carros e 3 outras com car_id DENTRO (...).

ATUALIZAÇÃO: Encontrei mais uma solução. Depois de especificar null=True em seu campo ForeignKey, o Django usará LEFT OUTER JOINs em vez de INNER JOIN. LEFT OUTER JOIN funciona sem problemas de desempenho neste caso, mas você pode enfrentar outros problemas que ainda não conheço.