我有一个大型 Postgres 表,其中包含 2+ 十亿个条目(1.5TB),并且大部分是非空的 char var 列。为了加快插入速度,我在批量上传之前删除了索引。但是,现在创建 b 树索引需要很长时间。对于我缩短的运行之一,它花了超过 12 个小时创建索引。
我正在尝试制作的示例表和索引:
Column | Type | Modifiers
-----------------------+-----------------------------+-----------
name | character varying | not null
id | character varying |
lifecycle_id | character varying |
dt | character varying |
address | character varying |
...
Indexes:
"name_idx" PRIMARY KEY, btree (name)
"id_idx" btree (rec_id)
"lifecycle_id_idx" btree (lifecycle_id)
Run Code Online (Sandbox Code Playgroud)
实际表有 18 列。我已将 maintenance_work_mem 设置为 15GB。这是在 RDS 上的 Postgres 9.6.11 上运行的。实例类是 db.m4.4xlarge。
由于有三个索引,在插入之前很难对数据进行排序。只插入数据而不删除索引会更快吗?还有其他加快索引创建的建议吗?