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) » SQL Anywhere Server - SQL-Benutzerhandbuch » Abfrageverarbeitung » Abfragen optimieren und ausführen » So funktioniert der Optimierer

 

Kostenbasierte Optimierung mit MIN- und MAX-Funktionen

Die kostenbasierte Optimierung für MIN/MAX ist so konzipiert, dass ein vorhandener Index genutzt wird, um das Ergebnis einer einfachen Aggregatabfrage mit MAX oder MIN zu berechnen. Ziel dieser Optimierung ist es, das Ergebnis durch Abrufen von nur wenigen Zeilen aus dem Index berechnen zu können. Eine Abfrage, die die folgenden Bedingungen erfüllt, ist ein Kandidat für diese Optimierung:

  • Darf keine GROUP BY-Klausel enthalten

  • Muss eine einzelne Tabelle betreffen

  • Darf nur eine Aggregatfunktion (MAX oder MIN) in der SELECT-Liste der Abfrage enthalten

Beispiel

Zur Veranschaulichung dieser Optimierung wird angenommen, dass ein Index "prod_qty (ShipDate ASC, Quantity ASC)" zur Tabelle "SalesOrderItems" vorhanden ist. Die Abfrage lautet:

SELECT MIN( Quantity )
 FROM SalesOrderItems
 WHERE ShipDate = '2000-03-25';

Diese Abfrage wird intern folgendermaßen umgeschrieben:

SELECT MAX( Quantity )
 FROM ( SELECT FIRST Quantity
        FROM SalesOrderItems
        WHERE ShipDate = '2000-03-25' 
            AND Quantity IS NOT NULL
 ORDER BY ShipDate ASC, Quantity ASC ) AS s(Quantity);

Die Warnung NULL_VALUE_ELIMINATED kann nicht für Aggregatabfragen erzeugt werden, wenn diese Optimierung angewendet wird.

Der Ausführungsplan (Kurzform) für die umgeschriebene Abfrage lautet:

GrByS[ RL[ SalesOrderItems<prod_qty> ] ]