Die Begriffe Parsen (Oracle), Query Planning (PostgreSQL) und Compiling (SQL Server) beschreiben das überführen einer SQL-Anweisung in einen Ausführungsplan.
Datenbanken mit zentralem Ausfürhungsplan-Cache haben zwei Parse-Phasen:
- Hard Parsing
Hard Parsing bedeutet, dass der Optimizer einen neuen Ausführungsplan aus einem SQL-String erstellt. Dazu müssen alle möglichen Join-Reihenfolgen und Indizes berücksichtigt werden. Hard Parsing ist sehr aufwendig.
- Soft Parsing
Soft Parsing bedeutet, dass ein passender Ausführungsplan im Cache gefunden wird. Danach müssen eventuell noch Zugriffsberechtigungen geprüft werden, der Ausführungsplan selbst kann aber wiederverwendet werden. Das ist eine verhältnismäßig einfache Operation.
Um einen passenden Ausführungsplan im Cache zu finden, wird meist ein Hash-Code des SQL-Strings als Schlüssel verwendet. Ein Ausführungsplan kann also nur dann gefunden werden, wenn die exakt gleiche SQL-Anweisung zuvor ausgeführt wurde. Andernfalls findet ein Hard-Parse statt. Durch das Einbetten von Werten in die SQL-Anweisung, wenn also keine Bind-Parameter verwendet werden, sieht jede SQL-Abfrage anders aus, sodass bei neuen Werten wieder ein Hard-Parse angestoßen wird.
Selbst in dem Fall, dass die exakt gleiche Anweisung, mit denselben Werten, nochmal ausgeführt wird, besteht das Risiko, dass der Ausführungsplan bereits aus dem Cache entfernt wurde. Ohne Verwendung von Bind-Parametern sieht jede SQL-Anweisung anders aus, und die Ausführungspläne werden nicht nur mehrfach erzeugt, sondern auch mehrfach im Cache abgespeichert. Dadurch fallen ältere Abfragen schneller aus dem Cache.
Links
Artikel: „Planning for Re-Use“ über Ausführungsplan Caching