Я новичок в PostgreSQL (версия 9), и мне нужен совет. У меня есть набор частей для страны А и другой набор частей для страны B. Каждый комплект имеет около двух миллионов записей. Мне нужно загрузить оба набора в базу данных. Каждый набор необходимо обновлять еженедельно. При обновлении набора я имею в виду очистку всех данных набора и повторное загрузку из файла. Установки должны обновляться независимо, поэтому при очистке данных из набора A я не должен очищать данные из набора B. Я понял, что когда я храню каждый набор в отдельном разделе, я могу обрезать каждый раздел независимо, что намного быстрее, чем удаление записей. Поэтому я решил сделать это таким образом (есть несколько столбцов в таблице «часть», но они не являются важными для этого вопроса):Разбиение и индексация PostgreSQL
CREATE TABLE part (
country CHAR(3) NOT NULL,
manufacturer_code CHAR(2) NOT NULL,
part_code CHAR(4) NOT NULL,
part_description VARCHAR(100)
);
CREATE TABLE part_cze (
CHECK (country = 'CZE')
) INHERITS (part);
CREATE INDEX idx__part_cze ON part_cze (part_code, manufacturer_code);
CREATE TABLE part_svk (
CHECK (country = 'SVK')
) INHERITS (part);
CREATE INDEX idx__part_svk ON part_svk (part_code, manufacturer_code);
запросов приложений таблица «частью» для извлечения данных. Запрос может выглядеть следующим образом:
SELECT * FROM part WHERE country='CZE' AND part_code='4578' AND manufacturer_code='22'
Мои вопросы:
- ли вышеописанная схема правильно или вы могли бы порекомендовать что-нибудь другое?
- Нужны ли индексы на столе
part
илиpart_cze
? Если я хорошо понимаю, Postgres извлекает данные из таблицыpart_cze
, которая имеет индекс, поэтому таблицаpart
не нуждается в этом. - Должен ли индекс
idx__part_cze
содержать страну колоний или достаточно, чтобы данные были разделены на разделы по стране? - Если я создал индекс на таблице
part
, должен ли он содержать столбецcountry
?