#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:
Вам также придется взглянуть на планы выполнения медленных запросов, чтобы определить, помогут ли индексы и какие индексы вы должны создать.
Правильный индекс часто очень помогает при выполнении запроса, а с базой данных, доступной только для чтения, вы можете создать столько, сколько вам нужно.
Вы должны убедиться, что все индексы создаются после загрузки таблицы, поскольку индексы сильно замедляют вставку. Либо удалите и создайте заново таблицу перед ежедневной загрузкой, либо усеките и удалите все индексы.