Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » UltraLite - Datenbankverwaltung » UltraLite-Datenbanken verwenden » UltraLite-Performance und -Optimierung

 

Vom Optimierer verwendete Zugriffsmethode bestimmen

Der UltraLite-Optimierer verwendet leistungsfähige Optimierungsstrategien für die Auswahl eines Indexes für die Abfrageoptimierung. Außer im Fall von einfachen Abfragen kann nicht leicht vorab ermittelt werden, welchen Index der Optimierer verwendet, um die Abfrageperformance zu optimieren, oder ob überhaupt ein Index verwendet wird. Bei zunehmender Komplexität hängt die Auswahl des Indexes von den Klauseln ab, die für Ihre Abfrage erforderlich sind. In einigen Fällen kann das Vorhandensein einer FOR READ ONLY-Klausel bewirken, dass der Optimierer einen direkten Table-Scan anstatt eines Indexes auswählt, um eine bessere Abfrageperformance zu erzielen.

Beim Optimieren einer Abfrage überprüft der Optimierer anhand der Anforderungen der Abfrage, ob Indizes vorhanden sind, die zur Verbesserung der Performance verwendet werden können. Wenn die Performance nicht mithilfe eines Indexes verbessert werden kann, durchsucht der Optimierer keinen Index. Stattdessen wird eine temporäre Tabelle oder ein direkter Page-Scan verwendet. Aus diesem Grund müssen Sie möglicherweise mit den Indizes experimentieren und die generierten Ausführungspläne häufig überprüfen, um Folgendes sicherzustellen:

  • Sie verwalten nur Indizes, die vom Optimierer verwendet werden.

  • Sie minimieren die Anzahl der erstellten temporären Tabellen. Weitere Hinweise finden Sie unter Temporäre Tabellen verwalten.

Bei komplexen Abfragen ist es noch schwieriger vorherzusehen, welcher Index verwendet wird. Wenn eine Abfrage z.B. ein WHERE-Prädikat sowie eine GROUP BY-Klausel zusätzlich zu einer ORDER BY-Klausel enthält, erfüllt ein einzelner Index möglicherweise nicht die Suchbedingungen der betreffenden Abfrage. Wenn Sie daher einen Index erstellt haben, um die Selektivitätsanforderungen des WHERE-Prädikats zu erfüllen, stellen Sie möglicherweise fest, dass der Optimierer ihn gar nicht verwendet. Stattdessen verwendet der Optimierer einen Index, der eine bessere Performance für die ORDER BY-Bedingungen bietet, da diese Klausel den größten Verarbeitungsaufwand hat.

Ausführungsplan überprüfen

Sie können den Ausführungsplan programmtechnisch mit dem geeigneten API-Aufruf oder in der Plananzeige in Interactive SQL überprüfen:

  • Wenn kein Index verwendet wird   wird der folgende Ausführungsplan eingeblendet:
    scan(T)

  • Wenn eine temporäre Tabelle verwendet wird   wird der folgende Ausführungsplan eingeblendet:
    temp [scan(T)]

  • Wenn ein Index verwendet wird   ist der Indexname im Ausführungsplan enthalten:
    scan (T, Indexname)