[英]Query SQLAlchemy taking too long
伙计们。 我收到了关于 SQLalchemy 的查询,该查询耗时过长。 如果是因为数据库太大(650 万行,所以我不这么认为)或者我做错了什么,我不会。 以下是表格。
class A(Base):
__tablename__ = 'tbl_a'
id = Column(Integer, primary_key=True, autoincrement=True)
a = Column(CHAR(3))
b = Column(DATE)
c = Column(Integer)
d = Column(Integer)
e = Column(Integer)
class B(Base):
__tablename__ = 'tbl_b'
id = Column(Integer, primary_key=True, autoincrement=True)
a = Column(Integer)
b = Column(DATE)
c = Column(Integer)
d = Column(Integer)
这是查询:
row = session.query(A).get(id)
value = session.query(B.d).filter((B.b == row.b)&
(B.d == row.c)&
(B.e == row.d)).first()
只有一个条件Bb == row.b
需要 2 分钟,更多我没有看到它在 10 分钟后结束。 获取row
值需要 0.5 秒。 我看到的一件事是您打算使用 where 子句的索引列可以加快速度。 如果是这样,我可以在我将记录上传到我的数据库后这样做吗?
ORM 与此问题无关,因此与 SQLAlchemy 无关,但我们该如何解决呢? 嗯,600 万条数据就这么多了。 需要时间是正常的。 如果你想解决这个问题,你应该使用timescaledb
,它是 SQL 数据库的扩展。
timesacledb 是做什么的?
它根据创建时间或indexing
的 id 将您的数据库表分块为单独的较小表。 当你要求600万条数据时,它不需要处理所有的行,因为它有索引和块,所以数据会在眨眼间提供!!
如何使用 timescaledb?
好吧,由于问题与 Python 或 ORM 无关,因此解决方案也与它们无关,您需要配置timescaledb
并以某种方式管理应该创建多少块以及一个块应该包含多少行。 这取决于您和您的数据。
祝你好运朋友。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.