Beschleunigung von Abfragen mit skalaren Unterabfragen durch Suchoptimierung

Eine skalare Unterabfrage gibt einen einzelnen Wert zurück (eine Spalte einer Zeile). Wenn keine Zeilen für die Rückgabe qualifiziert sind, gibt die Unterabfrage NULL zurück. Der Suchoptimierungsdienst kann die Leistung von Abfragen mit skalaren Unterabfragen verbessern. Weitere Informationen über Unterabfragen finden Sie unter Verwenden von Unterabfragen.

In den folgenden Abschnitten finden Sie weitere Informationen zur Unterstützung der Suchoptimierung für Abfragen mit Unterabfragen:

Aktivieren der Suchoptimierung für Abfragen mit skalaren Unterabfragen

Abfragen mit Unterabfragen werden nicht verbessert, es sei denn, Sie aktivieren die Suchoptimierung für die Spalte, die gleich dem Ergebnis der Unterabfrage ist. Um die Leistung von Abfragen mit skalaren Unterabfragen auf eine Tabelle zu verbessern, verwenden Sie den Befehl ALTER TABLE … ADD SEARCH OPTIMIZATION, um eine der folgenden Aktionen auszuführen:

  • Aktivieren Sie die Suchoptimierung für bestimmte Spalten.

  • Aktivieren Sie die Suchoptimierung für alle Spalten der Tabelle.

Im Allgemeinen ist es eine bewährte Praxis, die Suchoptimierung nur für bestimmte Spalten zu aktivieren. Verwenden Sie die ON EQUALITY-Klausel, um die Spalten anzugeben. Dieses Beispiel ermöglicht die Suchoptimierung für eine bestimmte Spalte:

ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON EQUALITY(mycol);
Copy

So geben Sie EQUALITY für alle Spalten der unterstützten Datentypen an (außer für halbstrukturierte und GEOGRAPHY):

ALTER TABLE mytable ADD SEARCH OPTIMIZATION;
Copy

Weitere Informationen dazu finden Sie unter Aktivieren und Deaktivieren der Suchoptimierung.

Unterstützte Datentypen

Der Suchoptimierungsdienst kann die Leistung von skalaren Unterabfragen auf Spalten der folgenden Datentypen verbessern:

Unterabfragen, die andere Arten von Werten beinhalten (z. B. VARIANT, FLOAT, GEOGRAPHY oder GEOMETRY ), profitieren nicht davon.

Beispiele für unterstützte Abfragen mit skalaren Unterabfragen

Die folgenden Abfragen sind Beispiele für Abfragen mit skalaren Unterabfragen, die vom Suchoptimierungsdienst unterstützt werden.

Diese Abfrage enthält eine skalare Unterabfrage, die dieselbe Tabelle wie die Tabelle in der äußeren Abfrage abfragt. Um die Leistung zu verbessern, stellen Sie sicher, dass die Suchoptimierung für die Spalte salary in der Tabelle employees aktiviert ist.

SELECT employee_id
  FROM employees
  WHERE salary = (
    SELECT MAX(salary)
      FROM employees
      WHERE department = 'Engineering');
Copy

Diese Abfrage hat eine skalare Unterabfrage, die eine Tabelle abfragt, die sich von der Tabelle in der äußeren Abfrage unterscheidet. Um die Leistung zu verbessern, stellen Sie sicher, dass die Suchoptimierung für die Spalte product_id in der Tabelle products aktiviert ist.

SELECT *
  FROM products
  WHERE products.product_id = (
    SELECT product_id
      FROM sales
      GROUP BY product_id
      ORDER BY COUNT(product_id) DESC
      LIMIT 1);
Copy