Ответ
Партиционирование — это разделение одной большой логической таблицы на меньшие физические части (партиции) на основе определённого правила.
Основные цели:
- Управление данными: Упрощение операций с большими объёмами данных (удаление старых данных через
DROP PARTITIONвыполняется мгновенно, в отличие отDELETE). - Повышение производительности запросов: СУБД может использовать секционирование по условию (Partition Pruning), чтобы сканировать только релевантные партиции.
- Повышение доступности: Операции с одной партицией меньше влияют на всю таблицу.
Основные типы партиционирования (на примере PostgreSQL):
-
По диапазону (RANGE): Данные распределяются по диапазонам ключа (например, по дате).
CREATE TABLE sensor_data ( sensor_id int, recorded_at date, value numeric ) PARTITION BY RANGE (recorded_at); CREATE TABLE sensor_data_y2023m01 PARTITION OF sensor_data FOR VALUES FROM ('2023-01-01') TO ('2023-02-01'); -
По списку (LIST): Партиция содержит строки с определёнными значениями ключа.
CREATE TABLE sales (region text, amount int) PARTITION BY LIST (region); CREATE TABLE sales_europe PARTITION OF sales FOR VALUES IN ('DE', 'FR', 'UK'); -
По хешу (HASH): Данные распределяются по партициям на основе хеш-функции от ключа, обеспечивая равномерное распределение.
CREATE TABLE users (id int, name text) PARTITION BY HASH (id); CREATE TABLE users_p0 PARTITION OF users FOR VALUES WITH (MODULUS 4, REMAINDER 0);
Опыт применения:
- Партиционирование таблиц с временными рядами (логи, события) по дате для эффективного удаления устаревших данных.
- Настройка индексов на партициях (можно создавать отдельные индексы для каждой партиции).
- Понимание ограничений: уникальные индексы/первичные ключи должны включать ключ партиционирования,
JOINмежду партиционированными таблицами может быть менее эффективным.