Zum Inhalt springen

EXPLAIN: Abfragepläne untersuchen

EXPLAIN SELECT * FROM tbl;

Die Anweisung EXPLAIN zeigt den physischen Plan an, also den Abfrageplan, der ausgeführt wird, und wird aktiviert, indem der Abfrage EXPLAIN vorangestellt wird. Der physische Plan ist ein Baum von Operatoren, die in einer bestimmten Reihenfolge ausgeführt werden, um das Ergebnis der Abfrage zu erzeugen. Um einen effizienten physischen Plan zu erzeugen, wandelt der Query Optimizer den vorhandenen physischen Plan in einen besseren physischen Plan um.

Zur Veranschaulichung siehe das folgende Beispiel:

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
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 │
└───────────────────────────┘

Beachten Sie, dass die Abfrage nicht tatsächlich ausgeführt wird – daher ist für jeden Operator nur die geschätzte Kardinalität (EC) sichtbar, die aus den Statistiken der Basistabellen berechnet und für jeden Operator heuristisch angepasst wird.

Tabellen-Scan-Operatoren zeigen den vollqualifizierten Tabellennamen einschließlich Katalog und Schema an (z. B. memory.myschema.mytable).

Weitere EXPLAIN-Einstellungen

Die Anweisung EXPLAIN unterstützt zusätzliche Einstellungen, mit denen die Ausgabe gesteuert werden kann. Die folgenden Einstellungen sind verfügbar:

Die Standardeinstellung. Zeigt nur den physischen Plan.

PRAGMA explain_output = 'physical_only';

Zeigt nur den optimierten Plan.

PRAGMA explain_output = 'optimized_only';

Zeigt sowohl den physischen als auch den optimierten Plan.

PRAGMA explain_output = 'all';

Siehe auch

Weitere Informationen finden Sie auf der Seite „Profiling“.