2014-02-26 124 views
1

我有一張3M行的表格。查詢優化 - PostgreSQL

我想檢索所有這些行並使用dc.js進行可視化。

問題是,對於單個列,大約需要70秒。

而如果我寫我的查詢大約需要240秒來檢索這些行。

我在這樣的列上使用select查詢。

SELECT COL1, COL2 FROM TABLE 

就是這樣。沒有分組,什麼都沒有。

但它需要很多時間。

聽說過索引,我爲我使用的列創建了索引。但即使沒有富有成效的結果。

+0

精確的PostgreSQL版本? '解釋(緩衝區,分析)'? –

+0

版本是'9.1'。什麼是緩衝區和分析?我對此很陌生。 – user3206082

+0

http://stackoverflow.com/tags/postgresql-performance/info,http://www.postgresql.org/docs/current/static/sql-explain.html –

回答

0

我們不應該在任何查詢中檢索3M行。發送3M記錄總是需要很長時間(與數據庫無關,它是傳輸速度)。它會殺死你的IO。大部分時間來自request-originator和postgres數據庫的傳輸(IO)。

請考慮將該請求分成批次的異步請求,這些異步請求會流式傳輸到客戶端。這意味着重構您的前端代碼(javascript)以改善用戶體驗。

0

您沒有指定使用PostgreSQL的環境。

作爲一個例子,在Node.js中,您可以通過在pg-query-stream的幫助下流式傳輸數據並在客戶端同時呈現數據來解決此問題,因此客戶端無需等待查詢完成並可以看到中間結果。

雖然這可能不是最好的解決方案。更好的解決方案是在數據庫函數中實現數據聚合以提供更小的數據子集。