需要有关如何在PostgresSQL中处理大表的建议

时间:2019-01-09 05:18:16

标签: postgresql amazon-dynamodb database-performance

我有一张大小为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)

1 个答案:

答案 0 :(得分:1)

执行计划表明索引显然是正确的方法。

如果您经常运行查询,则值得付出存储空间和索引所带来的数据修改性能的代价。

我当然不能凭权威说这一点,但是我不相信其他数据库系统有一个神奇的子弹,它可以使一切变得更快。如果您的数据适合于关系模型,则PostgreSQL将是一个不错的选择。