簡體   English   中英

查詢 SQLAlchemy 耗時太長

[英]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 數據庫的擴展。

Timescaledb 文檔

timesacledb 是做什么的?

它根據創建時間或indexing的 id 將您的數據庫表分塊為單獨的較小表。 當你要求600萬條數據時,它不需要處理所有的行,因為它有索引和塊,所以數據會在眨眼間提供!!

如何使用 timescaledb?

好吧,由於問題與 Python 或 ORM 無關,因此解決方案也與它們無關,您需要配置timescaledb並以某種方式管理應該創建多少塊以及一個塊應該包含多少行。 這取決於您和您的數據。

祝你好運朋友。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM