Eine kurze Referenz der wichtigsten SQLite Ausführungsplan-Operationen. Die Produktdokumentation ist hier.
Index- und Tabellenzugriffe
SCAN TABLE …
Liest die gesamte Tabelle.
SEARCH TABLE … USING INDEX
Durchwandert den Indexbaum, folgt der Blattknotenliste und greift auf die Tabelle zu.
SEARCH TABLE … USING COVERING INDEX
Durchwandert den Indexbaum und folgt der Blattknotenliste, um alle passenden Zeilen zu finden (auch bekannt als Index Only Scan).
Joins
Join-Operationen verbinden grundsätzlich nur zwei Tabellen auf einmal. Falls mehrere Join-Operationen in einer Abfrage vorkommen, werden sie schrittweise durchgeführt; zuerst zwei Tabellen, dann das Zwischenergebnis mit der nächsten. Insofern kann der Begriff „Tabelle“ im Folgenden auch ein Zwischenergebnis bezeichnen.
SQLite verwendet nur Nested Loop Joins. Der Ausführungsplan zeit die äußerste Tabelle zuerst. Danach folgen der Reihe nach die verschachtelten Zugriffe (ähnlich wie bei MySQL/MariaDB).
Verschachtlungen im Ausführungsplan stellen keine Joins, sondern Unterabfragen dar (inklusive union
, except
und intersect
).
Sortierungen und Gruppierungen
SQLite benötigt für die Durchführung von Group By
-, Order By
- und Distinct
-Klauseln immer einen Index. Falls es keinen passenden Index gibt, wird für die Abfrage ein temporärer Index angelegt.
USE TEMP B-TREE FOR …
Zeigt die Verwendung eines temporären Indexes für die entsprechende Operation an.
Top-N-Abfragen
In der Ausgabe von explain query plan
scheint eine Limit
-Klausel nicht auf. Im Maschinen-Code (nur explain
) wird LIMIT counter
angezeigt.