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