Что такое партиционирование таблицы в базах данных и для чего оно нужно?

«Что такое партиционирование таблицы в базах данных и для чего оно нужно?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Партиционирование — это разделение одной большой логической таблицы на меньшие физические части (партиции) по определённому правилу. Оно применяется для управления очень большими таблицами (миллионы и миллиарды строк).

Основные цели:

  • Повышение производительности запросов: Запрос, фильтрующий данные по ключу партиционирования (например, по дате), может сканировать только релевантные партиции, а не всю таблицу.
  • Упрощение управления данными: Операции архивации или удаления устаревших данных выполняются быстро путём манипуляций с целыми партициями (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');

Важно: Ключ партиционирования должен быть частью первичного ключа или уникального индекса.