我的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秒)。
有没有更快的方法来改变我的所有桌子?
我正在使用Python
和psycopg2
,如果这有任何区别的话。
答案 0 :(得分:1)
首先,您的命令不会创建四个索引。它创建了两个索引,其中第一个是复合索引(可能不完全符合您的要求,因为无论计划程序是否选择使用索引,列顺序都很重要。)
其次,您是否按顺序执行CREATE
命令?你能并行运行所有300个创建命令吗?
Psuedo代码因为我不熟悉Python:
tableList = ['table1', 'table2', 'table3', ...]
createSql = 'CREATE INDEX...[0]...'
[executeInThread(table) for table in tableList]