2017-10-16 183 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')) 

這保證只有一個數據庫查詢,並返回一個列表,你可以遍歷蟒的速度。應該快得多。