Ответ
Партиционирование таблиц — это метод физической организации данных в СУБД, при котором одна крупная логическая таблица разделяется на множество меньших физических частей (партиций) на основе значений указанных столбцов.
Основные цели:
- Повышение производительности запросов: Запрос, использующий ключ партиционирования, может сканировать только релевантные партиции вместо всей таблицы (partition pruning).
- Упрощение управления данными: Операции обслуживания (очистка старых данных, загрузка новых) выполняются на уровне партиций (например,
DROP PARTITION). - Повышение доступности: Отказ одной партиции не обязательно влияет на доступность других.
Основные типы партиционирования:
| Тип | Описание | Пример использования |
|---|---|---|
| По диапазону (RANGE) | Данные распределяются на основе диапазонов значений ключевого столбца. | PARTITION BY RANGE (sale_date) для данных по месяцам или годам. |
| По списку (LIST) | Каждая партиция содержит данные для явно заданного списка значений. | PARTITION BY LIST (region_code) для данных по странам или регионам. |
| По хэшу (HASH) | Данные распределяются по партициям с помощью хэш-функции от ключа. Обеспечивает равномерное распределение. | PARTITION BY HASH (user_id) для балансировки нагрузки. |
| Композитное | Комбинация методов, например, RANGE с последующим HASH. |
Пример на SQL (PostgreSQL):
-- Создание партиционированной таблицы по диапазону дат
CREATE TABLE sales (
id SERIAL,
sale_date DATE NOT NULL,
amount DECIMAL(10,2)
) PARTITION BY RANGE (sale_date);
-- Создание отдельных партиций
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');
-- Запрос автоматически затронет только нужную партицию
SELECT SUM(amount) FROM sales WHERE sale_date BETWEEN '2023-01-15' AND '2023-02-20';