flasksql炼金术由于多个外键导致插入速度慢

neekobn8  于 2021-06-15  发布在  Mysql
关注(0)|答案(0)|浏览(215)

因此,我目前正在尝试建立一个新的应用程序使用flask restful的后端,我仍然在学习,因为所有这一切对我来说是相当新的。我已经用几个不同的mysql表设置了所有的东西,下面详细介绍了它们之间的关系,看起来一切都很好,只是插入新数据的过程非常慢。
以下是我对当前设置的(简化)解释。基本上,我首先有一张航班表。

class FlightModel(db.Model):

    __tablename__ = "Flights"

    flightid = db.Column(db.Integer, primary_key = True, nullable=False)
    [Other properties]

    reviewid = db.Column(db.Integer, db.ForeignKey('Reviews.reviewid'), index = True, nullable = False)
    review = db.relationship("ReviewModel", back_populates="flight", lazy='joined')

然后,这个表指向一个reviews表,我在其中存储用户留下的全局评论。

class ReviewModel(db.Model):

    __tablename__ = "Reviews"

    reviewid = db.Column(db.Integer, primary_key = True, nullable = False)
    [Other properties]

    depAirportReviewid = db.Column(db.Integer, db.ForeignKey('DepAirportReviews.reviewid'), index=True, nullable = False)
    arrAirportReviewid = db.Column(db.Integer, db.ForeignKey('ArrAirportReviews.reviewid'), index=True, nullable = False)
    airlineReviewid = db.Column(db.Integer, db.ForeignKey('AirlineReviews.reviewid'), index=True, nullable = False)

    flight = db.relationship("FlightModel", uselist=False, back_populates="review", lazy='joined')
    depAirportReview = db.relationship("DepAirportReviewModel", back_populates="review", lazy='joined')
    arrAirportReview = db.relationship("ArrAirportReviewModel", back_populates="review", lazy='joined')
    airlineReview = db.relationship("AirlineReviewModel", back_populates="review", lazy='joined')

然后,可以在另一个表(例如,在下面的depairportreviews表中:此级别共有三个表)中对航班的不同方面进行更详细的检查。

class DepAirportReviewModel(db.Model):

    __tablename__ = "DepAirportReviews"

    reviewid = db.Column(db.Integer, primary_key = True, nullable = False)
    [Other properties]

    review = db.relationship("ReviewModel", uselist=False, back_populates="depAirportReview", lazy='joined')

插入过程很慢(每次飞行通常需要1秒来插入,当我尝试批量插入几百个时这是一个问题)。
我理解这是因为所有这些关系以及它所暗示的数据库的所有访问,以便为不同的表检索不同的id。对吗?我能做些什么来解决这个问题,或者我需要重新设计表来消除其中的一些关系吗?
谢谢你的帮助!
编辑:直接显示执行的sql显示了我的预期:每次插入总共执行7个简单的查询,每次大约需要300毫秒。这相当长,我猜主要是由于到达服务器的时间。除了删除外键什么也做不了,对吧?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题