2017-10-16 8 views
0

は、これらのモデルを考える:django restframework:多くの関連フィールドを効率的に検索する方法は?

class B: 

     my_field = TextField() 


    class A: 
     b = ManyToMany(B) 

私は多くの分野b(すなわちb__my_field)に多くを横断することによりmy_fieldでフルテキスト検索を行いたい要素を検索するときに、私は、Aに+ 50Kの行を持っています。

これは、多くの要素がBAオブジェクトあたり〜3未満の場合にうまく動作します。どのように私はそのパフォーマンスよりも大きなものが印象的に低下する場合。

プリフェッチ関連の検索を行うことができますか?干し草のようなものは私の唯一の選択肢ですか?

+0

このクエリは高速ですか? 'B.objects.filter(my_field__contains = '検索テキスト')' –

+0

Djangoやデータベースでパフォーマンスに問題がありますか? djangoが1回の検索リクエストに対して生成するクエリの数はいくつですか? –

答えて

0

クエリセットをループすると、djangoはループの各ステップに対してデータベース要求を行います。 ORMの落とし穴の例については、thisを参照してください。 django ORMを使用する際に学ぶべきことは、データベースラウンドトリップをできるだけ避けるためにコマンドを使用することです。これを行う1つの方法はvalues()関数です。理想的には、必要なものだけを得るべきです。 これを試してみてください:

l = list(A.b.all().values('my_field')) 

これが唯一のデータベースクエリを保証し、そして、あなたはPythonの速度をループすることができますリストを返します。はるかに速くなければならない。

関連する問題