2015-07-22 5 views
2

Я новичок в 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' 

Мои вопросы:

  1. ли вышеописанная схема правильно или вы могли бы порекомендовать что-нибудь другое?
  2. Нужны ли индексы на столе part или part_cze? Если я хорошо понимаю, Postgres извлекает данные из таблицы part_cze, которая имеет индекс, поэтому таблица part не нуждается в этом.
  3. Должен ли индекс idx__part_cze содержать страну колоний или достаточно, чтобы данные были разделены на разделы по стране?
  4. Если я создал индекс на таблице part, должен ли он содержать столбец country?

ответ

0
  1. Выглядит отлично, за исключением того, что вы не определили первичные ключи, но это не является обязательным требованием для Postgres.

  2. Не требуется индексов на «части», если в этой таблице нет значительного количества данных.

  3. страна не должна находиться в индексе postgres, выберет правую таблицу на основе ограничений проверки. Включение страны в индекс будет только способствовать увеличению индекса и, следовательно, снижению эффективности.

  4. Создайте индекс только в том случае, если вы помещаете в эту таблицу значительное количество данных. Тогда в зависимости от запросов и фактических данных в таблице это может или не поможет помещать страну в индекс.