2017-10-16 148 views
0

鉴于这些机型:django restframework:如何高效地搜索多个相关领域?

class B: 

     my_field = TextField() 


    class A: 
     b = ManyToMany(B) 

我在A + 50K行,寻找通过遍历诸多元素我想要做的my_field全文搜索到许多领域b(即b__my_field)时。

此工作正常时,许多元素BA对象的数量小于〜3。如果我拥有比表现更出色的表现,那么如何呢?

想知道如果我可以做某种预取相关的搜索?像干草堆是我唯一的选择吗?

+0

该查询快速? 'B.objects.filter(my_field__contains ='搜索文本')' –

+0

Django或数据库中是否存在性能问题? django为一个搜索请求生成多少个查询? –

回答

0

当你遍历一个查询集时,django为你的循环的每个步骤发出一个数据库请求。有关ORM陷阱的信息,请参阅this。在使用django ORM时应该学习的一件事是尽可能使用命令来避免数据库往返。一种方法是使用values()函数。理想情况下,你应该只得到你所需要的东西。 试试这个:

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

这保证只有一个数据库查询,并返回一个列表,你可以遍历蟒的速度。应该快得多。