Python Postgres按多列排序,然后创建新索引

时间:2018-10-13 12:55:13

标签: python postgresql psycopg2

我正在使用psycopg2连接到postgres数据库。

数据库有约2亿行,我正在尝试创建按几列顺序排序的主键,即

part_id, date, time
A001   2014-10-23  00:00:00
A001   2014-10-23  00:00:10
...
A002   2014-10-23  00:00:00

我可以执行以下操作:

ALTER TABLE data ADD COLUMN ID SERIAL PRIMARY KEY;

但是我如何才能按part_id(虽然是varchar,它是上面的零件数字)排序,然后先日期然后是时间,然后为已排序的表创建id列?

1 个答案:

答案 0 :(得分:1)

您可以在树列上添加一个主键:

alter table data add primary key(part_id, date, time);

但是,许多经验丰富的SQL开发人员认为主键应仅用于标识行和其他任何内容。根据这种方法,您应该使用简单的id主键,并在必要时创建其他索引,例如

alter table data 
    add id serial primary key,
    add unique (part_id, date, time);

这似乎不太理想,因为它需要两个索引而不是单个索引,但在实践中它很舒适并且避免了不必要的复杂化。

强烈建议不要尝试创建一个整数列,该整数列会根据其他列反映顺序。