鉴于这些模型:
class B:
my_field = TextField()
class A:
b = ManyToMany(B)
我在A
中有+ 50K行,在搜索要在my_field
上进行全文搜索的元素时,遍历多对多字段b
(即b__my_field
})。
当每个B
对象的多个元素A
的数量小于~3时,这种方法很有效。但是,如果我的表现比表现更好,那么表现会令人印象深刻。
想知道我是否可以进行某种与预取相关的搜索?干草堆是我唯一的选择吗?
答案 0 :(得分:0)
当您遍历查询集时,django会为循环的每个步骤发出数据库请求。有关ORM陷阱的信息,请参阅this。使用django ORM时应该学习的一点是使用命令尽可能避免数据库往返。一种方法是使用values()函数。理想情况下,你应该只得到你需要的东西。 试试这个:
l = list(A.b.all().values('my_field'))
这只保证一个数据库查询,并返回一个可以以python速度循环的列表。应该快得多。