我想使用Python Django將一些測量數據存儲到我的postgresql數據庫中。 到目前爲止,我已經用django製作了一個docker容器,而另一個用了postgresql服務器。 但是,我在我的測量表中接近2M行,並且查詢開始變得非常慢,而我不確定爲什麼,我沒有做非常激烈的查詢。PostgreSQL查詢速度慢,有什麼問題?
此查詢
SELECT ••• FROM "measurement" WHERE "measurement"."device_id" = 26 ORDER BY "measurement"."measure_timestamp" DESC LIMIT 20
例如僅需數秒3和5之間運行,這取決於我查詢的設備。
我預計這會跑得快很多,因爲我沒有做任何幻想。 測量表
id INTEGER
measure_timestamp TIMESTAMP WITH TIMEZONE
sensor_height INTEGER
device_id INTEGER
帶有id和measure_timestamp索引。 服務器看起來不太忙,即使它只有512M的內存,在查詢過程中我還剩下很多。
我配置了postgresql server shared_buffers = 256MB和work_mem = 128MB。 總數據庫只有100MB以下,所以它應該很容易適合。 如果我在PgAdmin中運行查詢,我看到很多Block I/O,所以我懷疑它必須從磁盤讀取,這顯然很慢。
任何人都可以給我正確的方向幾點如何找到問題?
編輯: 在查詢中添加解釋分析的輸出。我現在在device_id上添加了索引,這對我有很大的幫助,但是我希望查詢時間更快。 https://pastebin.com/H30JSuWa
在查詢上運行'EXPLAIN(ANALYZE,BUFFERS)',並將結果添加到您的問題中。這將有助於給出一個不僅基於猜測的答案。 –
另外:將表定義添加到您的問題,包括PK FK和索引。還有一些數據的描述,比如基數。 – joop