Вам нужно добавить индекс для многораздельной таблицы (postgres 11)? - PullRequest
1 голос
/ 27 апреля 2020

Моя команда рассматривает вопрос о переносе нашей таблицы без разделов с ~ 1 ТБ данных в таблицу с разделами.

Мы будем использовать разделение по диапазонам на основе столбца отметки времени.

Одна вещь Я не понимаю, нужно ли нам добавлять индекс в столбце метки времени, если он используется в качестве ключа раздела. Если мы сделаем наши разделы достаточно маленькими (например, раздел на каждый день), будет ли это действовать аналогично индексу?

Мы будем выполнять запросы только с максимальным разрешением в один день.

Я неохотно добавляю индекс, поскольку мы пробовали это в прошлом, и он так и не завершился (возможно, потому что мы не отключали записи. На самом деле нет возможности отключить записи на длительный период).

1 Ответ

1 голос
/ 27 апреля 2020

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

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

Другое преимущество заключается в том, что разбиение делает массовое удаление данных (вдоль границ раздела) намного более эффективным. И, наконец, работа с автовакуумом станет проще.

Два момента о разбиении:

  • Обновление до v12; произошли существенные улучшения производительности, связанные с разбиением.

  • Не используйте слишком много разделов. С v12 вы можете, вероятно, go до нескольких тысяч, в более ранних версиях вы будете иметь проблемы с производительностью раньше.

...