【问题标题】:SQLAlchemy low performance when use relationshipSQLAlchemy 使用关系时性能低下
【发布时间】:2015-12-09 18:22:16
【问题描述】:

我的 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 出了什么问题?

【问题讨论】:

  • 我觉得this可能对你有用。
  • 我认为这不是我的问题,我的情况 - 加入与否,在主题中你提到的花花公子只是在循环中加载记录,当我制作时,像这样(伪代码)'u.photos = 照片;ujosonify(u)' 没关系,效果很好。不过还是谢谢你!

标签: python sqlalchemy


【解决方案1】:

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

【讨论】:

  • 是的,我明白了。但令人惊讶的是,加入开始挂在如此小的数据上,我必须使用外键过滤器。我认为我的代码可能有问题:/谢谢
猜你喜欢
  • 1970-01-01
  • 2015-03-22
  • 2013-02-20
  • 2011-06-15
  • 2011-11-03
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多