在Django视图中,我正在做这样的事情......
lists = Stuff.objects.exclude(model2=None)
for alist in lists:
if alist.model2.model3.id == target_id:
addSomeStuff
缓慢来自if模型中的模型(数据库行)到模型 当列表中只有大约486个项目时,这实际上需要几秒钟才能运行。我认为这很慢,因为正在执行486 * 2 + 1 db查找。如果我在哪里重写它,那么它立刻抓住了整个model2表和model3表,然后只是在那里过滤,它将是3分贝命中,我相信它会更快。这会破坏django所做的所有好处。
有没有办法说服django像这样进行某种批量数据查找?
答案 0 :(得分:5)
做
Stuff.objects.exclude(model2=None).select_related('model2')
并做
if alist.model2.model3_id == target_id
这些应该将其剪切为1个SQL查询。