SQLAlchemy在使用关系时性能低下

时间:2015-12-09 18:22:16

标签: python sqlalchemy

我的Flask应用程序中有SQLAlchemy模型:

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    photos = db.relationship('Photo', lazy='joined')

class Photo(db.Model):
     __tablename__ = 'photos'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    photo = db.Column(db.String(255))

当我查询用户时,我会自动获取用户的照片。但我注意到如果用户有很多照片,查询u = User.query.get(1)变得非常慢。我也这样做,但手动使用lazy='noload'选项

u = User.query.get(1)
photos = Photo.query.filter_by(user_id == 1)

并且在相同的数据上,它的工作速度更快。问题出在哪里,sql join是慢的(不要这么认为,因为它开始挂在100-1kk的照片对象上,而不是那么大的数据)或SQLAlchemy中的错误?

1 个答案:

答案 0 :(得分:1)

根据我的经验,我建议你熟悉SQLAlchemy Loading Relationships。有时即使关系功能很容易,在较大的数据集中有用也最好不要使用它,甚至执行纯文本SQL。从性能的角度来看,对于较大的数据集,这将更好。