Neben Suchbedingungen beeinflussen auch die folgenden Faktoren die Abarbeitung von SQL-Anweisungen und somit die Performance von Datenbankanwendungen:
· Art der SQL-Anweisung (SELECT, INSERT, UPDATE, DELETE)
· Elemente einer SELECT-Anweisung (ORDER-Klausel, UPDATE-Klausel, DISTINCT-Spezifikation, Angabe von FOR REUSE),
· Änderungen, die in der UPDATE-Anweisung spezifiziert sind
· Art der physikalischen Speicherung einer Tabelle sowie die Größe der Tabellen (Anzahl der Zeilen und B*-Baum-Seiten)
Viele Performance-Probleme lassen sich vermeiden, wenn Sie die folgenden Tipps beim Design Ihrer Datenbank beachten:
· Die Definition der Tabellen sollte von einer vorher durchgeführten Untersuchung der Strukturen abgeleitet werden. Bei der Definition der Schlüsselspalten sollte beachtet werden, dass diejenigen Spalten, die besonders selektiv sind und für die besonders häufig Suchbedingungen angegeben werden, an den Anfang des Schlüssels gestellt werden. Damit besteht die Möglichkeit, nur einen sehr kleinen Teil der Tabelle bei der Abarbeitung einer SELECT-Anweisung betrachten zu müssen.
· Es sollten nur Spalten mit möglichst hoher Selektivität invertiert werden. Spalten wie z. B. Geschlecht oder Familienstand sollten Sie aufgrund ihrer geringen Anzahl an unterschiedlichen Werten nicht als Indexschlüssel wählen. Diese Spalten könnten nur sehr selten für eine nicht-sequentielle Suche herangezogen werden, da diese meist aufwendiger wäre als die sequentielle Suche.
· Bei relativ statischen Datenbeständen können viele Spalten invertiert werden. Hierbei müssen Sie wie bei der Definition der Schlüsselspalten beachten, dass Sie am Anfang des Index möglichst selektive Spalten, die häufig in Gleichheitsbedingungen verwendet werden, angeben.
· Es sollten möglichst nicht alle Spalten, die in Suchbedingungen benutzt werden, invertiert werden. Der Platz für die Indizes und der Aufwand für ihre Pflege ist beträchtlich.
· Wenn viele Änderungen in einer Tabelle gemacht worden sind, sollte die UPDATE STATISTICS-Anweisung ausgeführt werden.
· Sie sollten nur solche Suchbedingungen formulieren, die nicht von allen Zeilen erfüllt werden. Es werden häufig Anwendungen geschrieben, in denen der Benutzer die Werte einer Suchbedingung bestimmt. Gibt er keine Werte ein, werden Standardwerte in die Suchbedingung eingesetzt, so dass sie immer „wahr“ liefert. Das Datenbanksystem muss nun diese wirkungslose Suchbedingung für jede zu untersuchende Zeile auswerten. Besser ist es, verschiedene SELECT-Anweisungen in Abhängigkeit von einer Benutzereingabe durchzuführen.
· Die selektivsten Suchbedingungen sollten an den Anfang der Bedingung gestellt werden, da die Überprüfung ggf. früher abgebrochen werden kann.
·
Die Angabe
columnx IN
(1,13,24,...)
kann vom Optimizer besser ausgewertet werden als
semantisch gleiche Angabe
columnx=1 OR
columnx=13 OR columnx=24 OR ...