Как использовать партиционирование в SQL?

Партиционирование в SQL делит одну большую таблицу на физические части по ключу, например по дате, tenant или хешу. Это помогает уменьшить объём сканирования, ускорить обслуживание данных и упростить удаление старых сегментов.
Подробный ответ

Что даёт партиционирование

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

Как его выбирают

  • RANGE — когда данные упорядочены по времени или числовому диапазону;

  • LIST — когда строки логично делятся по значениям, например по tenant_id или региону;

  • HASH — когда нужно равномерно распределить данные без естественного диапазона.

Пример

CREATE TABLE events (
  id BIGINT,
  created_at TIMESTAMP NOT NULL,
  tenant_id BIGINT NOT NULL,
  payload JSONB
) PARTITION BY RANGE (created_at);

Дальше создают партиции по месяцам или неделям, чтобы запросы с фильтром по дате читали только нужный диапазон.

Когда это особенно полезно

  • когда таблица очень большая и запросы почти всегда фильтруются по ключу партиционирования;

  • когда старые данные можно удалять целыми партициями;

  • когда нужно отделить горячие и холодные данные;

  • когда обычные индексы уже не дают достаточно выигрыша.

О чём важно помнить

Ключ партиционирования должен совпадать с реальными запросами. Если он выбран плохо, база всё равно будет читать много данных, а обслуживание станет сложнее. Также нужно заранее продумать индексы внутри партиций и то, как будут работать JOIN и агрегации.

Как ответить на собеседовании

Я использую партиционирование, когда одна таблица разрастается до размеров, где обычные индексы уже не спасают. Чаще всего для временных данных выбираю PARTITION BY RANGE по дате, для multi-tenant — LIST по tenant_id, а HASH — когда важна равномерность распределения. Главное — чтобы разбиение совпадало с паттернами запросов.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге