需要有关如何在 PostgresQL 中处理大 table 的建议

Need suggestion on how to handle large table in PostgresSQL

我有一个大小为 32Gb 的 table,Postgres 中的索引大小约为 38Gb。

我有一个未编入索引的列 x。 table 大小以每周 1GB 的速度增长。 x 列上有很多查询 运行。

在这个 table 上针对列 x 的每个查询都消耗了我 CPU 的 17%,并占用了大约。 5~6秒 return 数据库负载较重的数据。

处理此问题的最佳方法是什么?行业标准是什么?

我为列 x 建立了索引,索引的大小增加了 2GB — 查询时间减少到约 100 毫秒。

我正在研究 DynamoDB 以复制 table 的数据,但我不确定这是否是正确的方法,因此提出了这个问题。

我希望数据访问速度更快,同时请记住这会导致功能出现瓶颈。

此处请求的是 运行s:

的查询
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)

执行计划表明您的索引显然是正确的选择。

如果你运行经常查询,那么在存储space和索引这样的数据修改性能上付出代价是值得的。

当然我不能权威地说,但我不相信其他数据库系统有灵丹妙药可以让一切变得更快。如果您的数据适合关系模型,PostgreSQL 将是一个不错的选择。