Индексация Postgres

Я новичок в Postgres.

Мы реализовали SCD type-2 в нашем проекте с использованием Postgres. Входной файл представляет собой файл полного обновления с примерно 30 миллионами записей ежедневно.

Номер счета является ключевым столбцом.

Примерное количество новых записей будет 20К/день. Если запись отсутствует в источнике, то эта запись закрывается с датой окончания в цели. Примерное количество закрываемых записей - 10к/день

Время выполнения запроса постоянно увеличивается. Поможет ли индексация ускорить процесс?

Любое предложение по индексу, который будет использоваться?


person Bagavathi    schedule 18.10.2016    source источник
comment
Индексация должна помочь. Вы должны предоставить образцы данных и пример того, как выглядят новые данные.   -  person Gordon Linoff    schedule 18.10.2016
comment
Привет, Гордон. Если в файле есть номер счета, которого нет в целевом, мы помечаем запись как новую и вставляем ее. Если номер учетной записи в файле присутствует в цели и если есть изменения в атрибутах номера учетной записи, выполняется обновление.   -  person Bagavathi    schedule 18.10.2016
comment
Трудно сказать, если вы не покажете фактический код   -  person David Aldridge    schedule 18.10.2016


Ответы (2)


Сохраняются ли эти 30 миллионов записей в виде каждой строки в базе данных? Что ж, если это так, то индексирование (создание и поддержание) такого количества записей также будет в некоторой степени бременем для базы данных. Однако в PostgreSQL появился новый индекс BRIN Index, который может вам немного помочь. Я написал блог об этом несколько месяцев назад. Вы можете просмотреть его и, очевидно, изучить его больше.

http://blog.bajratechnologies.com/2016/09/16/Postgres-BRIN-Index/

person Pragun    schedule 18.10.2016
comment
Привет, Pragun. 30 миллионов записей хранятся в виде каждой строки в базе данных. - person Bagavathi; 18.10.2016
comment
Что ж, тогда для обычного индекса, который мы создаем, то есть индекса btree, база данных создает и изменяет 30 миллионов индексов каждый день. Это огромно, не так ли? Я имею в виду, что даже пространство индекса добавляется к пространству базы данных. Таким образом, вы можете попробовать BRIN Index, но я не могу гарантировать, что производительность увеличится. Это полностью зависит от дизайна, структуры и конфигурации вашей базы данных. - person Pragun; 18.10.2016

Вам также придется просмотреть планы выполнения медленных запросов, чтобы определить, помогут ли индексы и какие индексы вам следует создать.

Правильный индекс часто очень помогает с запросом, а с базой данных только для чтения вы можете создать столько, сколько вам нужно.

Вы должны убедиться, что все индексы создаются после загрузки таблицы, поскольку индексы сильно замедляют вставку. Либо удалите и заново создайте таблицу перед ежедневной загрузкой, либо усеките и удалите все индексы.

person Laurenz Albe    schedule 18.10.2016