ОБЪЯСНЕНИЕ: Просмотр планов запросов
EXPLAIN SELECT * FROM tbl;
Оператор EXPLAIN отображает физический план, т.е. план запроса, который будет выполнен, и активируется путём добавления в запрос префикса EXPLAIN. Физический план представляет собой дерево операторов, которые выполняются в определённом порядке для получения результата запроса. Для генерации эффективного физического плана оптимизатор запросов преобразует существующий физический план в лучший физический план.
Для демонстрации, см. пример ниже:
CREATE TABLE students (name VARCHAR, sid INTEGER);
CREATE TABLE exams (eid INTEGER, subject VARCHAR, sid INTEGER);
INSERT INTO students VALUES ('Mark', 1), ('Joe', 2), ('Matthew', 3);
INSERT INTO exams VALUES (10, 'Physics', 1), (20, 'Chemistry', 2), (30, 'Literature', 3);
EXPLAIN ANALYZE
SELECT name
FROM students
JOIN exams USING (sid)
WHERE name LIKE 'Ma%'; ┌─────────────────────────────┐
│┌───────────────────────────┐│
││ Physical Plan ││
│└───────────────────────────┘│
└─────────────────────────────┘
┌───────────────────────────┐
│ PROJECTION │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ name │
└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ HASH_JOIN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ INNER │
│ sid = sid ├──────────────┐
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ EC: 1 │ │
└─────────────┬─────────────┘ │
┌─────────────┴─────────────┐┌─────────────┴─────────────┐
│ SEQ_SCAN ││ FILTER │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ exams ││ prefix(name, 'Ma') │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ sid ││ EC: 1 │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ││ │
│ EC: 3 ││ │
└───────────────────────────┘└─────────────┬─────────────┘
┌─────────────┴─────────────┐
│ SEQ_SCAN │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ students │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ sid │
│ name │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ Filters: name>=Ma AND name│
│ <Mb AND name IS NOT NULL │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ EC: 1 │
└───────────────────────────┘ Обратите внимание, что запрос фактически не выполняется — поэтому мы можем видеть только оцененную мощность (EC) для каждого оператора, которая рассчитывается с использованием статистики базовых таблиц и применением эвристик для каждого оператора.
Дополнительные настройки Explain
Оператор EXPLAIN поддерживает дополнительные настройки, которые можно использовать для управления выводом. Доступны следующие настройки:
По умолчанию. Отображает только физический план.
PRAGMA explain_output = 'physical_only';
Отображает только оптимизированный план.
PRAGMA explain_output = 'optimized_only';
Отображает и физический, и оптимизированный планы.
PRAGMA explain_output = 'all';
См. также
Для получения дополнительной информации, см. страницу «Профилирование».
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/guides/meta/explain.html