
SQLITE EXPLAIN
« | 07 Jan 2024 | »Wie baut man SQL Queries und Indexe so, dass sie möglichst einfach und kurz sind und dabei trotztdem hoch effizient sind?
Es ist häufig eine “Glaubensfrage”, was eine Datenbank wirklich durchführt, womit man seine Statements “religiös” motiviert absetzt.
Doch da gibt es so ein Kommando, das den Nebel lichten kann…
Wenn man Tabellen per SQL abfragt und die Abfrage etwas komplizierter wird, und dann auch noch Sortierungen hinzukommen, kann es passieren, dass die Ausführung bei vielen Daten plötzlich extrem lange braucht.
Nun führt man Indexe ein und erhofft sich eine Verbesserung, die dann aber leider ausbleibt.
Tatsächlich kann es je nach Datenbank einen großen Unterschied ausmachen, ob man links mit rechts oder umgekehrt vergleicht, oder ob man zuerst sortiert und dann filtert oder anders herum.
Ein solches Problem quälte mich neulich in der Firma und ich verstand um’s Verrecken nicht, warum die benutzte SQLite Datenbank trotz Index so schlechte Antwortzeiten lieferte.
Wenn man aber ein EXPLAIN QUERY PLAN
vor die eigentliche Abfrage packt,
gibt einem SQLite (und auch so manche andere Datenbank) eine Liste der
durchgeführten Schritte an.
Diese Information ist wahrlich Gold wert, denn nun kann man unterschiedliche Abfrage Varianten lokal testen und sieht sofort, wann und wenn ein Index genutzt wird und wann nicht.
Ohne den Query-Plan musste ich Abfragen mit riesigen Datenmengen quasi am Live-System ausprobieren, um zu sehen, dass etwas nicht OK war.
In meinem Fall musste ich eine “einfache Query”, die den Index ignorierte, durch eine etwas kompliziertere ersetzen um das gleiche Ergebnis aber mit Nutzung eines Index-Boost zu erhalten.
Fazit
Ein Lob auf meinen Kollegen, der mir
EXPLAIN QUERY PLAN
in Erinnerung rief!
Mir war gar nicht bewusst, dass es dieses Kommando in den erweiterten SQL-Standard geschafft hat und auf vielen Plattformen aushilft.
Zukünftig werde ich bei neuen Queries immer mal “nachsehen”, ob die Datenbank meinen Input auch so versteht, wie ich es sehe.