Freigeben über


Optimieren von Filtern und Verknüpfungen

Um Entscheidungen zur Optimierung einer Ansicht oder Abfrage treffen zu können, müssen Sie möglicherweise den Ausführungsplan kennen. Dieser Plan legt die Reihenfolge fest, in der Verknüpfungs- und Filterklauseln ausgewertet werden. Mit der SYS(3054)-Funktion können Sie eine von drei Rushmore ™-Optimierungsebenen anzeigen. Diese drei Ebenen geben den Grad an, zu dem die Filter- oder Verknüpfungsbedingungen in der Lage sind, die Rushmore-Optimierung zu verwenden. Die Ebenen sind vollständig (Full), teilweise (Partial) oder gar nicht (None).

So zeigen Sie den Ausführungsplan für Filter an

  1. Geben Sie im Befehlsfenster die SYS(3054,1)-Funktion ein, um SQL ShowPlan zu aktivieren.

  2. Geben Sie die SQL SELECT-Anweisung ein.

    Beispielsweise können Sie eingeben:

    SELECT * FROM customer, orders ;
    AND Upper(country) = "MEXICO"
    
  3. Der Ausführungsplan wird angezeigt.

    Für dieses Beispiel könnte die Anzeige z. B. folgendermaßen aussehen:

    Using Index Tag Country to optimize table customer
    Rushmore Optimization Level for table customer: Full
    Rushmore Optimization level for table orders: none
    
  4. Geben Sie im Befehlsfenster die SYS(3054,0)-Funktion ein, um SQL ShowPlan zu deaktivieren.

Geben Sie anschließend die SYS-Funktion mit der Zahl 11 an, um Verknüpfungen in den Klauseln FROM und WHERE auszuwerten.

So zeigen Sie den Ausführungsplan für Verknüpfungen an

  1. Geben Sie im Befehlsfenster die SYS(3054,11)-Funktion ein, um SQL ShowPlan zu aktivieren.

  2. Geben Sie die SQL SELECT-Anweisung ein.

    Beispielsweise können Sie eingeben:

    SELECT * ;
    FROM customer INNER JOIN orders ;
       ON customer.cust_id = orders.cust_id ;
    WHERE Upper(country) = "MEXICO"
    
  3. Der Ausführungsplan wird angezeigt.

    Für dieses Beispiel könnte die Anzeige z. B. folgendermaßen aussehen:

    Using Index Tag Country to optimize table customer
    Rushmore Optimization Level for table customer: Full
    Rushmore Optimization level for table orders: none
    Joining table customer and table orders using Cust_id
    
  4. Geben Sie im Befehlsfenster die SYS(3054,0)-Funktion ein, um SQL ShowPlan zu deaktivieren.

Festlegen der Auswertung von Verknüpfungen

Entspricht der Ausführungsplan für die Verknüpfungen nicht Ihren besonderen Anforderungen, können Sie festlegen, dass die Verknüpfungen entsprechend ihrer Eingabereihenfolge ausgeführt werden, und dass keine automatische Optimierung erfolgt. Hierzu müssen Sie das Schlüsselwort FORCE angeben und die Verknüpfungsbedingungen in die FROM-Klausel schreiben. Verknüpfungsbedingungen in WHERE-Klauseln werden nicht in die erzwungene Verknüpfungsauswertung einbezogen.

Anmerkung   Das Schlüsselwort FORCE kann nicht in SQL Pass-Through-Anweisungen oder Remoteansichten verwendet werden, da es eine Visual FoxPro-Erweiterung des ANSI-Standards ist und nicht von anderen SQL-Wörterbüchern unterstützt wird. Das Schlüsselwort FORCE ist global und gilt aus diesem Grund für alle Tabellen in der JOIN-Klausel. Stellen Sie sicher, dass die Reihenfolge, in der die Verknüpfungstabellen angezeigt werden, genau der Reihenfolge entspricht, in der sie verknüpft werden sollen. Sie können zum Festlegen der Ausführungsreihenfolge von Verknüpfungen auch Klammern verwenden.

In diesem Beispiel wird die erste angegebene Verknüpfung auch zuerst ausgewertet. Zuerst wird die Tabelle Customer mit der Tabelle Orders verknüpft. Das Ergebnis dieser Verknüpfung wird anschließend mit der Tabelle OrdItems verknüpft:

SELECT * ;
   FROM FORCE Customers ;
   INNER JOIN Orders ;
      ON Orders.Company_ID = Customers.Company_ID ;
   INNER JOIN OrItems;
      ON OrdItems.Order_NO = Orders.Order_NO 

In diesem Beispiel wird die Verknüpfung zwischen den Tabellen Orders und OrdItems innerhalb der Klammern zuerst ausgewertet. Das Ergebnis dieser Verknüpfung wird anschließend in der Auswertung der Verknüpfung mit der Tabelle Customers verwendet:

SELECT * ;
FROM FORCE Customers ;
   INNER JOIN (orders INNER JOIN OrdItems ;
      ON OrdItems.Order_No = Orders.Order_No) ;
      ON Orders.Company_ID = Customers.Company_ID

Siehe auch

Einstellen der maximalen Anzahl von zu ladenden Datensätzen | Erstellen von Abfragen | Verbindungen für mehrere Remoteansichten gemeinsam verwenden | Testen, ob eine Verbindung belegt ist | SYS(3054)