我在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