将索引和ID主键列添加到大表的最快方法是什么?

时间:2017-10-19 19:13:51

标签: postgresql postgresql-9.6

我的Postgres(PostgreSQL 9.6.5-1)数据库中有大约300个表。这些表很大,每个都有大约600万条记录。为了插入记录,我创建了没有任何索引的表,因为我发现它没有任何索引要快得多。我也没有添加ID列(主键,自动增量,唯一)。

我现在需要为每个表添加索引,以及新的ID列。 为此,我使用以下命令:

CREATE INDEX IF NOT EXISTS some_table_1_index ON some_table_1 (latitude, longitude, measurement_time, level, speed, altitude);
ALTER TABLE some_table_1 ADD COLUMN id SERIAL PRIMARY KEY;

我发现每个命令需要30到90秒...这意味着我需要7h30来完成所有表格(假设每个命令最坏情况为90秒)。

有没有更快的方法来改变我的所有桌子?

我正在使用Pythonpsycopg2,如果这有任何区别的话。

1 个答案:

答案 0 :(得分:1)

首先,您的命令不会创建四个索引。它创建了两个索引,其中第一个是复合索引(可能不完全符合您的要求,因为无论计划程序是否选择使用索引,列顺序都很重要。)

其次,您是否按顺序执行CREATE命令?你能并行运行所有300个创建命令吗?

Psuedo代码因为我不熟悉Python:

tableList = ['table1', 'table2', 'table3', ...]
createSql = 'CREATE INDEX...[0]...'
[executeInThread(table) for table in tableList]