SQL делит одну большую таблицу на физические части по ключу, например по дате, tenant или хешу. Это помогает уменьшить объём сканирования, ускорить обслуживание данных и упростить удаление старых сегментов.
Как использовать партиционирование в SQL?
Подробный ответ
Что даёт партиционирование
Партиционирование позволяет базе читать только нужные части таблицы, а не весь объём данных. Это особенно полезно для больших таблиц с естественным разбиением по времени, регионам или арендаторам.
Как его выбирают
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 — когда важна равномерность распределения. Главное — чтобы разбиение совпадало с паттернами запросов.
Оцени свой прогресс