[英]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.