我的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中的错误?
答案 0 :(得分:1)
根据我的经验,我建议你熟悉SQLAlchemy Loading Relationships。有时即使关系功能很容易,在较大的数据集中有用也最好不要使用它,甚至执行纯文本SQL。从性能的角度来看,对于较大的数据集,这将更好。