Ответ
Партиционирование — это разделение одной большой логической таблицы на меньшие физические части (партиции) по определённому правилу. Оно применяется для управления очень большими таблицами (миллионы и миллиарды строк).
Основные цели:
- Повышение производительности запросов: Запрос, фильтрующий данные по ключу партиционирования (например, по дате), может сканировать только релевантные партиции, а не всю таблицу.
- Упрощение управления данными: Операции архивации или удаления устаревших данных выполняются быстро путём манипуляций с целыми партициями (
DROP PARTITION,DETACH PARTITION), а не миллионами отдельных строк. - Распределение нагрузки: Партиции можно размещать на разных дисках или серверах для лучшего I/O.
Типичные стратегии (на примере PostgreSQL):
- По диапазону (RANGE): Для данных с естественным диапазоном, например, дат.
- По списку (LIST): Для явного перечисления значений, например, кодов регионов.
- По хешу (HASH): Для равномерного распределения строк.
Пример создания партиционированной таблицы по диапазону дат:
-- 1. Создаём основную (партиционированную) таблицу
CREATE TABLE sales (
id SERIAL,
sale_date DATE NOT NULL,
amount DECIMAL
) PARTITION BY RANGE (sale_date);
-- 2. Создаём партиции для хранения данных за разные периоды
CREATE TABLE sales_2023_q1 PARTITION OF sales
FOR VALUES FROM ('2023-01-01') TO ('2023-04-01');
CREATE TABLE sales_2023_q2 PARTITION OF sales
FOR VALUES FROM ('2023-04-01') TO ('2023-07-01');
Важно: Ключ партиционирования должен быть частью первичного ключа или уникального индекса.