我有一张大小为32Gb的表,在Postgres中索引大小约为38Gb。
我有一列x
,该列未建立索引。
桌子的大小以每周1GB的速度增长。
在列x
上有很多查询。
此表上每个列x
的查询都消耗我的CPU的17%,并占用大约5〜6秒返回数据库中的重负载数据。
处理此问题的最佳方法是什么?什么是行业标准?
我为x
列建立了索引,索引的大小增加了2GB-查询时间减少到〜100ms。
我正在研究DynamoDB以复制表的数据,但是我不确定这是否是正确的处理方式,因此是这个问题。
我希望数据访问更快,同时请记住,这应该会导致功能瓶颈。
按要求在此处运行查询:
database_backup1=> EXPLAIN ANALYZE SELECT * FROM "table_name" WHERE "table_name"."x" IN ('ID001', 'ID002', 'ID003', 'ID004', 'ID005') LIMIT 1;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------
Limit (cost=0.00..56442.83 rows=100 width=1992) (actual time=0.010..155288.649 rows=7 loops=1)
-> Seq Scan on "table_name" (cost=0.00..691424.62 rows=1225 width=1992) (actual time=0.009..155288.643 rows=7 loops=1)
Filter: ((x)::text = ANY ('{ID001,ID002,ID003,ID004,ID005}'::text[]))
Rows Removed by Filter: 9050574
Planning time: 0.196 ms
Execution time: 155288.691 ms
(6 rows)
答案 0 :(得分:1)
执行计划表明索引显然是正确的方法。
如果您经常运行查询,则值得付出存储空间和索引所带来的数据修改性能的代价。
我当然不能凭权威说这一点,但是我不相信其他数据库系统有一个神奇的子弹,它可以使一切变得更快。如果您的数据适合于关系模型,则PostgreSQL将是一个不错的选择。