Оптимизация запросов. Планы запросов.

План запроса

описание того, каким образом СУБД будет выполнять SQL-запрос, включая порядок операций, способы доступа к данным и оценки затрат.

План строится оптимизатором запросов на основе:

План запроса используется для:

Виды планов запросов

По уровню абстракции
Тип плана Описание
Логический Описывает что нужно сделать (SELECT, JOIN, WHERE)
Физический Описывает как именно выполняется запрос
По моменту получения
План Характеристика
Оценочный (Estimated) Строится до выполнения
Фактический (Actual) Получается после выполнения с замерами

Структура плана запроса

План обычно представлен в виде дерева операций, где:

Основные операции плана

Операции доступа к данным
Операция Назначение
Seq Scan Полное сканирование таблицы
Index Scan Чтение через индекс
Index Only Scan Только индекс, без таблицы
Bitmap Index Scan Поиск подходящих строк
Bitmap Heap Scan Чтение строк по битовой карте
Операции соединения таблиц (JOIN)
Тип JOIN Описание
Nested Loop Вложенные циклы
Hash Join Хэш-таблица в памяти
Merge Join Слияние отсортированных данных

Выбор зависит от:

Операции обработки данных
Операция Функция
Filter Применение условий
Sort Сортировка
Aggregate Агрегация (SUM, COUNT)
GroupAggregate Группировка
HashAggregate Агрегация через хэш
Limit Ограничение строк
Materialize Временное хранение

Метрики плана запроса

Стоимость (Cost)
cost = startup_cost .. total_cost
Метрика Значение
Startup Cost Цена получения первой строки
Total Cost Общая оценка стоимости

Стоимость — условная величина, не время

Количество строк
Метрика Описание
rows (estimated) Ожидаемое число строк
rows (actual) Фактическое число строк

Большая разница → проблемы со статистикой

Время
Показатель Назначение
Planning Time Время построения плана
Execution Time Время выполнения
Использование ресурсов
Метрика Описание
CPU Загрузка процессора
I/O Дисковые операции
Memory Использование памяти
Loops Количество повторений

Оптимизация запросов по плану

Основные методы оптимизации:


Revision #1
Created 2026-01-17 02:02:58 UTC by Fedmog1lnkv
Updated 2026-01-17 02:11:42 UTC by Fedmog1lnkv