Beschleunigung von Abfragen mit skalaren Funktionen durch Suchoptimierung¶
Eine skalare Funktion gibt bei jedem Aufruf einen einzigen Wert zurück. Der Suchoptimierungsdienst kann die Leistung von Abfragen verbessern, die skalare Funktionen in Gleichheitsprädikaten verwenden. Die skalare Funktion kann eine systemdefinierte skalare Funktion oder eine benutzerdefinierte skalare SQL-Funktion sein.
Die maximale Anzahl von Verbindungen, die vom Pool zugewiesen werden können (an Clients ausgecheckt oder im Leerlauf auf Auschecken wartend).
Aktivieren der Suchoptimierung für Abfragen, die skalare Funktionen verwenden¶
Abfragen werden nicht verbessert, es sei denn, Sie aktivieren die Suchoptimierung für die Spalten, die in Gleichheitsprädikaten angegeben sind, die die Skalarfunktionen aufrufen: Um die Leistung von Abfragen mit skalaren Funktionen auf eine Tabelle zu verbessern, verwenden Sie den Befehl ALTER TABLE … ADD SEARCH OPTIMIZATION:
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 Abfragen verbessern, die Spalten der folgenden Datentypen in Gleichheitsprädikaten verwenden, die Skalarfunktionen aufrufen:
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).
Abfragen, die andere Arten von Werten beinhalten (z. B. VARIANT, FLOAT, GEOGRAPHY oder GEOMETRY), profitieren nicht davon.
Beispiele für unterstützte Abfragen mit skalaren Funktionen¶
Die folgenden Abfragen verwenden skalare Funktionen und werden vom Suchoptimierungsdienst unterstützt.
Verwenden Sie eine vom System definierte skalare Funktion im Prädikat einer Abfrage¶
Diese Abfrage verwendet die systemdefinierte skalare Funktion SHA2 in einem Gleichheitsprädikat. Um die Leistung zu verbessern, stellen Sie sicher, dass die Suchmethode EQUALITY für die Spalte mycol
in der Tabelle test_so_scalar_function_system
aktiviert ist.
SELECT *
FROM test_so_scalar_function_system
WHERE mycol = SHA2('Snowflake');
Verwenden Sie eine benutzerdefinierte skalare SQL -unktion im Prädikat einer Abfrage¶
Erstellen Sie eine benutzerdefinierte skalare Funktion:
CREATE OR REPLACE FUNCTION test_scalar_udf(x INTEGER)
RETURNS INTEGER
AS
$$
SELECT x + POW(2, 3)::INTEGER + 2
$$
;
Diese Abfrage verwendet die Funktion test_scalar_udf
in einem Gleichheitsprädikat. Um die Leistung zu verbessern, stellen Sie sicher, dass die Suchmethode EQUALITY für die Spalte mycol
in der Tabelle test_so_scalar_function_udf
aktiviert ist.
SELECT *
FROM test_so_scalar_function_udf
WHERE mycol = test_scalar_udf(15750);