SQLAlchemy外键访问优化

时间:2015-05-07 08:39:27

标签: python mysql sqlalchemy

我在两个表之间有一个非常简单的父 - 子(一对一)关系。

当我按ID查看时,一切似乎都没问题。但如果我以10k IDs运行它,则返回结果需要将近70秒。

在调试之后,我发现我的字典中的外键的赋值是大部分时间。

result = {
    "name": parent.name,
    "child_name": parent.child.name
}

如果我注释掉"child_name",我会得到大约2秒(10k)的结果,大约需要70秒。

1 个答案:

答案 0 :(得分:2)

猜测是主查询仅从数据库加载Parent的实例,并且在访问parent.child属性时,为每个{{1}生成单独的SQL语句实例,以便从数据库中读取Parent数据。因此,您最终会遇到Child次查询。

这里改进的方法是使用Eager Loading。 对于1-1关系,一个好的选择是10K + 1

joinedload