向具有数百万条记录的 PostgreSQL 表添加列需要几分钟 - 如何提高性能?

问题描述 投票:0回答:1

问题:

我正在使用 PostgreSQL 数据库,我需要向包含数百万条记录的表添加一个附加列。问题是此操作需要几分钟才能完成,影响了我的应用程序的整体性能。有没有办法加快这个过程并最大限度地减少停机时间,特别是在处理 PostgreSQL 时?

问题描述:

  • PostgreSQL 版本:PostgreSQL 12.11
  • 该表包含大约 4,000,000 条记录。
  • 我使用的 SQL 查询如下所示:

ALTER TABLE my_table ADD COLUMN new_column INT;

postgresql query-optimization database-performance postgresql-12
1个回答
0
投票

向较大的表中添加列通常很耗时,但一般来说,添加具有默认值的列时耗时较少。

ALTER TABLE my_table ADD COLUMN new_column INT DEFAULT 0;

如果您使用的是varchar,则可以使用,

ALTER TABLE my_table ADD COLUMN new_column VARCHAR(255) DEFAULT '';

还有另一种选择,比如同时。此选项允许您在执行查询时运行操作。例如,

ALTER TABLE my_table ADD COLUMN new_column INT CONCURRENTLY;

并且我们可以使用批量更新的方法来批量添加列,以减少整个过程的时间消耗,并将其拆分为小过程。

DO $$ 
DECLARE
   chunk_size INT := 10000; -- Adjust as needed
   start_index INT := 0;
BEGIN
   LOOP
      EXIT WHEN start_index >= 4000000;
      EXECUTE 'UPDATE my_table SET new_column = DEFAULT WHERE id >= ' || start_index || ' AND id < ' || start_index + chunk_size;
      start_index := start_index + chunk_size;
   END LOOP;
END $$;

希望这有帮助..

© www.soinside.com 2019 - 2024. All rights reserved.