Эффективное секционирование таблиц

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

По нашему мнению, важными составляющими эффективного секционирования являются:

  • Поддержка HASH-секционирования, RANGE-секционирования и LIST-секционирования
  • Возможность быстрого выбора секций без полного перебора (подробнее в нашем блоге).
  • Упрощение фильтрации для определенных секций (подробнее в нашем блоге).
  • Hash-join pushdown - возможность проведения HASH JOIN внутри отдельных секций.
  • Возможность выбора секции в процессе выполнения запроса - в тех случаях, когда на стадии планирования это сделать невозможно, т.к. значения параметров могут быть известны только на стадии выполнения.Это относится к  вложенным циклам, результатам подзапросов, общим планам подготовленных запросов.
  • Субсекционирование.

Мы разрабатываем всё это в расширении pg_pathman, с учетом проекта декларативного синтаксиса секционирования, разрабатываемого Amit Langote.