TurboDB Engine Dokumentation TurboSQL Statements |
Previous Top Next |
Einige Grundsätze für schnelle TurboSQL Abfragen:
Where und Having Klauseln sollten mit einfachen, mit and verknüpften Bedingungen beginnen
Falls es logisch machbar ist sollte die Bedingung so angeordnet sein:
A.a = B.a and C.b > X and (...)
D.h. mit einfachen Vergleichen beginnen, die für die gesamte Suchbedingung erfüllt sein müssen. Diese simplen Vergleiche sind am besten zur Optimierung geeignet. Der Optimierer versucht derartige Strukturen automatisch für die gegebene Suchbedingung zu erstellen, kann aber in manchen Fällen nicht schlau genug dazu sein.
Spalten-Bezeichner in Vergleichen separieren
Schreiben Sie
A.a > 2 * :ParamValue,
wird das besser optimiert als
A.a/2 > :ParamValue.
Entscheidend ist hier, dass die Referenz der Spalte A.a alleine auf der linken Seite des Vergleichs steht.
like statt Upper verwenden
Die Bedingung
A.a like 'USA'
kann optimiert werden
Upper(A.a) = 'USA'
dagegen nicht.
Left Outer Joins statt Right Outer Joins verwenden
Die Implementierung von Joins bevorzugt Left Outer Joins. Immer wenn es in einer Anwendung möglich ist, sollte
B left outer join A on B.a = A.a
verwendet werden statt
A right outer join B on A.a = B.a.
Das kann die Abfrage merklich beschleunigen. Der Optimierer macht die Konversion nicht automatisch, da sonst keine Möglichkeit bestünde, die Abfrage von Hand zu optimieren.
Reihenfolge der Tabellen in der From Klausel ändern
Diese Reihenfolge kann eine erhebliche Auswirkung auf die Geschwindigkeit der Abfrage haben. Falls Sie den Eindruck haben Ihre Abfrage könnte schneller sein, versuchen Sie die Reihenfolge der Tabellen zu variieren.
select * from A, B, C
where ...
kann viel schneller sein als
select * from C, B, A
where ...
Normalerweise wird der Optimierer die Reihenfolge der Tabellen, die nicht Teil eines Joins sind, optimal zu wählen, manchmal ist die Assistenz eines Programmierers hilfreich.