Я использую psycopg2 для подключения к базе данных postgres.
в базе данных ~ 200 миллионов строк, и я пытаюсь создать первичный ключ, упорядоченный по порядку нескольких столбцов, т.е.
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 в отсортированную таблицу?
Вы можете добавить первичный ключ в столбцы дерева:
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);
Это может показаться субоптимальным, потому что ему нужно два индекса вместо одного, но на практике он удобен и позволяет избежать некоторых ненужных осложнений.
Я настоятельно рекомендую не пытаться создать один целочисленный столбец, который будет отражать порядок в соответствии с другими столбцами.