DjangoORMのINNERJOINの修正を実装しました。これは、INNERJOINで注文する場合にSTRAIGHT_JOINを使用します。私はDjangoのコア開発者と話をしましたが、今のところ、これを別のバックエンドとして行うことにしました。したがって、ここで確認できます: https://pypi.python.org/pypi / django-mysql-fix
ただし、もう1つの回避策があります。 Jamesの回答の抜粋を使用しますが、select_relatedを次のように置き換えます:
qs = qs.select_related('').prefetch_related('wheel', 'dealer', 'category')
INNER JOINをキャンセルし、4つの個別のクエリを使用します。1つは車をフェッチし、3つはcar_id
を使用します。 IN(...)。
更新: もう1つの回避策を見つけました。 ForeignKeyフィールドにnull=Trueを指定すると、DjangoはINNERJOINの代わりにLEFTOUTERJOINを使用します。この場合、LEFT OUTER JOINはパフォーマンスの問題なしで機能しますが、私がまだ気付いていない他の問題に直面する可能性があります。