Оптимизация запросов. Планы запросов.
План запроса
описание того, каким образом СУБД будет выполнять 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 |
Количество повторений |
⸻
Оптимизация запросов по плану
Основные методы оптимизации:
- добавление индексов;
- уменьшение числа строк;
- корректные JOIN;
- отказ от SELECT *;
- обновление статистики (ANALYZE);
- устранение лишних сортировок.
No comments to display
No comments to display