我在Postgres數據庫的表中有很多行。選擇不同。最合適的技術來減少等待時間
我每20分鐘在此表中插入一次,每天清除舊的條目,並且只有2個選擇選項。
所以我想優化時間,我等待我的選擇。
首先選擇一種:
Select * from table where item=<item_id>
二是怎麼樣的:
Select distinct(datetime) from table
因此,爲了優化1個選擇,我可能會讓indexies爲item
領域。正如我所理解的,這項技術完美適用於那些不適合查詢的地方。
但我不知道如何優化我的2選擇查詢。我認爲像劃分應該幫助我,但有幾種類型的分區,我有點困惑。
那麼優化我的查詢的最佳選擇是什麼?
此外,我正在使用python和Django模型。如果有一個好的圖書館可以完成所有骯髒的工作。那太好了。現在最合適的,我發現:http://architect.readthedocs.io/
編輯1 感謝埃文卡羅爾。
試圖對第二個查詢使用索引。 命令:
explain analyze select distinct time_updated from wow_auction_gordunni
給出:
HashAggregate (cost=335091.65..335092.51 rows=86 width=8) (actual time=4246.582..4246.607 rows=91 loops=1)
Group Key: time_updated
-> Seq Scan on wow_auction_gordunni (cost=0.00..313574.92 rows=8606692 width=8) (actual time=0.047..2257.979 rows=8616562 loops=1)
Planning time: 0.080 ms
Execution time: 4246.675 ms
然後創建索引和真空:
Create INDEX ON wow_auction_gordunni (time_updated);
VACUUM ANALYZE wow_auction_gordunni;
explain analyze select distinct time_updated from wow_auction_gordunni;
給出如下:
Unique (cost=0.43..249907.42 rows=92 width=8) (actual time=0.057..3537.626 rows=92 loops=1)
-> Index Only Scan using wow_auction_gordunni_time_updated_idx on wow_auction_gordunni (cost=0.43..228163.42 rows=8697599 width=8) (actual time=0.055..2488.408 rows=8696562 loops=1)
Heap Fetches: 85796
Planning time: 0.726 ms
Execution time: 3537.800 ms
如此看來,指數有點幫助(postgres sta被用來使用指數),但不是顯着。
如果PostgreSQL *知道*索引中的幾乎所有元組都對所有人都可見,那麼只有當表最近已經被清空並沒有什麼改變時,它纔會起作用。 –
感謝您的命令。 「解析分析」命令後,不知道「真空分析」以及數據是什麼。將挖掘他們,並嘗試這一天。 – Snobby
試圖做一個索引。更新的問題。它有幫助,但不是很多。 – Snobby