Индексирование Postgres

#sql #postgresql #indexing #scd #scd2

#sql #postgresql #индексирование #scd #scd2

Вопрос:

Я новичок в Postgres.

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

Номер учетной записи является ключевым столбцом.

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

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

Есть какие-либо предложения по используемому индексу?

Комментарии:

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

2. Привет, Гордон — Если в файле есть номер учетной записи, которого нет в target, мы помечаем запись как новую и вставляем ее. Если номер учетной записи в файле присутствует в цели, и если есть изменения в атрибутах номера учетной записи, то выполняется обновление.

3. Трудно сказать, если вы не покажете фактический код

Ответ №1:

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

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

Комментарии:

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

2. Что ж, тогда для обычного индекса, который мы создаем, то есть индекса btree, база данных создает и изменяет 30 миллионов индексов каждый день. Это огромно, не так ли? Я имею в виду, что даже пространство индекса добавляется к пространству базы данных. Итак, вы можете попробовать BRIN Index , но я не могу гарантировать, что производительность увеличится. Это полностью зависит от дизайна, структуры и конфигурации вашей базы данных.

Ответ №2:

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

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

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