我正在使用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列?
答案 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);
这似乎不太理想,因为它需要两个索引而不是单个索引,但在实践中它很舒适并且避免了不必要的复杂化。
强烈建议不要尝试创建一个整数列,该整数列会根据其他列反映顺序。