Проверяет понимание работы с партиционированными таблицами в SQL и механизма выбора партиции планировщиком.
Партиционирование — это разделение большой таблицы на несколько меньших физических таблиц (партиций), которые хранятся отдельно, но логически представляют одну таблицу. Для приложения и кода это абсолютно прозрачно: вы продолжаете выполнять обычные SQL-запросы (SELECT, INSERT, UPDATE, DELETE) к исходной таблице, не указывая конкретные партиции. Например, если у вас есть таблица orders, разбитая по месяцам, вы пишете SELECT * FROM orders WHERE order_date = '2025-01-15', и база данных сама решает, какие партиции затронуть.
Планировщик запросов анализирует условия в WHERE и сравнивает их с определением партиций (например, диапазоны дат или списки значений). Если условие позволяет однозначно определить, какие партиции могут содержать нужные данные, планировщик выполняет отсечение партиций (partition pruning) — исключает из плана выполнения все партиции, которые заведомо не подходят. Это работает как для чтения, так и для записи: при INSERT планировщик определяет партицию по значению ключа партиционирования, а при UPDATE/DELETE — по условиям WHERE.
Рассмотрим таблицу с партиционированием по диапазону дат:
CREATE TABLE orders (
id INT,
order_date DATE,
amount DECIMAL
) PARTITION BY RANGE (order_date);
CREATE TABLE orders_2025_01 PARTITION OF orders
FOR VALUES FROM ('2025-01-01') TO ('2025-02-01');
CREATE TABLE orders_2025_02 PARTITION OF orders
FOR VALUES FROM ('2025-02-01') TO ('2025-03-01');
-- Запрос к логической таблице
SELECT * FROM orders WHERE order_date = '2025-01-20';
-- Планировщик поймёт, что нужна только orders_2025_01При вставке новой записи с order_date = '2025-02-10' база автоматически направит её в orders_2025_02.
Партиционирование позволяет масштабировать большие таблицы, сохраняя простоту кода. Используйте его, когда таблица становится слишком большой для эффективного сканирования, и убедитесь, что запросы содержат условия по ключу партиционирования, чтобы планировщик мог выполнять отсечение партиций.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
Postgres
SQL
Ключевые слова
Подпишись на Node.js Developer в телеграм