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
Beispiele für unterstützte Abfragen mit skalaren 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);
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;
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:
Datentypen für Festkommazahlen, darunter die folgenden:
Alle INTEGER-Datentypen, die eine Skalierung von 0 haben.
Nicht ganzzahlige Festkommazahlen, die eine andere Skalierung als 0 haben (z. B.
NUMBER(10,2)
).Wandelt von Festkommazahlen um (zum Beispiel
NUMBER(30, 2)::NUMBER(30, 5)
).
Zeichenfolgen- und Binärdatentypen (zum Beispiel VARCHAR und BINARY).
Datentypen für Datum und Uhrzeit (zum Beispiel DATE, TIME und TIMESTAMP).
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');
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);