Oracle Senior IT

Query-Optimierung

Wie man Datenbank-Abfragen beschleunigt

08.11.2011
Von 
Dr. Klaus Manhart hat an der LMU München Logik/Wissenschaftstheorie studiert. Seit 1999 ist er freier Fachautor für IT und Wissenschaft und seit 2005 Lehrbeauftragter an der Uni München für Computersimulation. Schwerpunkte im Bereich IT-Journalismus sind Internet, Business-Computing, Linux und Mobilanwendungen.
Bei jeder Datenbank-Abfrage sollte sorgfältig darauf geachtet werden, unnötige Dateizugriffe zu minimieren. Überflüssige Angaben in Datenbank-Anfragen müssen deshalb vermieden werden, soll die Performance nicht darunter leiden. Das Ziel sollte eine möglichst schnelle Anfragebearbeitung und eine möglichst geringe Anzahl von Seitenzugriffen sein.

Um aus einzelnen Abfragen einer Datenbank eine möglichst schnelle und intelligente Anfrage zu erzeugen, besitzt jedes Datenbank-Managementsystem (DBMS) einen Query Optimizer. Das damit optimierte Konstrukt benutzt das DBMS anschließend für die weitere Arbeit. Man kann sich das wie eine Zwischenschicht zwischen einer Abfrage und dem eigentlichen Datensammelprozess vorstellen.

Der Oracle Optimizer optimiert Datenbank-Abfragen regel- oder kostenbasiert.
Der Oracle Optimizer optimiert Datenbank-Abfragen regel- oder kostenbasiert.
Foto: Oracle

Der Oracle Optimierer beispielsweise erstellt für jeden ausgeführten SQL-Befehl einen Ausführungsplan, der regelbasiert oder kostenbasiert sein kann. Im regelbasierten Modus geht der Optimierer nach starren Regeln vor und beeinflusst den Aufbau von SQL-Befehlen. Beispielsweise ändert er die Reihenfolge der Tabellen in der From-Klausel eines Select-Befehls, so dass diese effizienter abgefragt werden.

Der kostenbasierte Optimierer ist dem regelbasierten im allgemeinen überlegen, da er auf Basis von Analysedaten etwa über die Größen der beteiligten Tabellen die Anfragen optimiert. Teilweise sind die Unterschiede gravierend: So wird berichtet, dass einzelne Statements, die Systemtabellen abfragten, mit dem kostenbasierten Modus um 30 Prozent schneller waren als mit dem regelbasierten.

Die Optimierung der Abfragen kann im übrigen natürlich auch direkt beeinflusst werden. Als Beispiel nur zwei Regeln: Um Zwischenergebnisse klein zu halten sollten beispielsweise Selektionen so früh wie möglich erfolgen. Zusammenfassbare Basisoperationen wie die Selektion und Projektion sollten ohne Zwischenspeicherung von Zwischenergebnissen als ein Bearbeitungsschritt realisiert werden. Gleiche Teilausdrücke sollten zusammengefasst werden, da Zwischenergebnisse so wiederverwendbar sind. Eine gute Einführung in die Query-Optimierung am Beispiel von Oracle gibt es bei der ETH Zürich.