我在SQLAlchemy数据库中有这些表:
(*kinfo).start_time = timespec_to_ns((*current).start_time);
表:
DSource
class DSource(Base):
__tablename__ = 'dsource'
source_id = Column(Integer, primary_key=True)
subjects= relationship("Subject")
表:
Subject
class Subject(Base):
__tablename__ = 'subject'
subject_id = Column(Integer, primary_key=True)
source_id=Column(Integer, ForeignKey("dsource.source_id"),nullable=False)
sequences= relationship("DSequence")
表:
DSequence
和class DSequence(Base):
__tablename__ = 'dsequence'
sequence_id = Column(Integer, primary_key=True)
subject_id = Column(Integer, ForeignKey("subject.subject_id"),nullable=False)
frames= relationship("Frame")
表:
Frame
现在我想针对class Frame(Base):
__tablename__ = 'frame'
f_id = Column(Integer, primary_key=True)
sequence_id=Column(Integer, ForeignKey("dsequence.sequence_id"),nullable=False)
action_units=Column(String)
expression=Column(String)
pts3d=Column(String)
pts2d=Column(String)
表编写一个查询,该表为我提供了Frame
的所有帧。一种方法是编写一个嵌套循环,用source_id=2
检索所有subjects
,然后为每个主题找到序列,然后为每个序列找到相应的帧。
dsource=2
但是查询具有这些嵌套关系的数据库真的很慢,因为在fr=session.query(Frame,Subject,DSequence,DSource).filter(DSource.source_id==2).all()
表中我有大约90,000个帧。
有什么方法可以更快地查询吗?我不确定Frame
是否可以帮助我解决这个问题。
答案 0 :(得分:3)
我找到了解决方案,有一种非常简单的方法可以执行上述查询,而且速度非常快:
sudo apt-get upgrade