我在两个表之间有一个非常简单的父 - 子(一对一)关系。
当我按ID
查看时,一切似乎都没问题。但如果我以10k IDs
运行它,则返回结果需要将近70秒。
在调试之后,我发现我的字典中的外键的赋值是大部分时间。
result = {
"name": parent.name,
"child_name": parent.child.name
}
如果我注释掉"child_name"
,我会得到大约2秒(10k)的结果,大约需要70秒。
答案 0 :(得分:2)
猜测是主查询仅从数据库加载Parent
的实例,并且在访问parent.child
属性时,为每个{{1}生成单独的SQL
语句实例,以便从数据库中读取Parent
数据。因此,您最终会遇到Child
次查询。
这里改进的方法是使用Eager Loading。
对于1-1关系,一个好的选择是10K + 1
:
joinedload