Suchoptimierungsdienst¶
Der Suchoptimierungsdienst kann die Leistung bestimmter Typen von Such- und Analyseabfragen erheblich verbessern. Es wird eine umfangreicher Satz von Prädikaten zum Filtern unterstützt (siehe Identifizieren von Abfragen, die von der Suchoptimierung profitieren).
Bemerkung
Um mit einem Tutorial zu beginnen, das die Ausführungszeit mit und ohne Suchoptimierung vergleicht, fahren Sie mit Erste Schritte mit der Suchoptimierung fort.
Der Suchoptimierungsdienst zielt darauf ab, die Leistung bestimmter Typen von Abfragen auf Tabellen erheblich zu verbessern. Dazu zählen:
Selektive Punktsuchabfragen auf Tabellen. Eine Punktsuchabfrage gibt nur eine oder eine geringe Anzahl unterschiedlicher Zeilen zurück. Typische Anwendungsfälle sind z. B.:
Geschäftsanwender, die schnelle Antwortzeiten bei kritischen Dashboards mit hochselektiven Filtern benötigen.
Datenwissenschaftler, die große Datenmengen untersuchen und nach bestimmten Teilmengen von Daten suchen.
Datenanwendungen, die eine kleine Ergebnismenge auf der Grundlage eines umfangreichen Satzes von Filterprädikaten abrufen.
Weitere Informationen dazu finden Sie unter Beschleunigen von Punktsuchabfragen mit der Suchoptimierung.
Suche nach Teilzeichenfolgen und regulären Ausdrücken (z. B. [ NOT ] LIKE, [ NOT ] ILIKE, [ NOT ] RLIKE usw.). Weitere Informationen dazu finden Sie unter Beschleunigen von Abfragen mit Teilzeichenfolgen und regulären Ausdrücken mit der Suchoptimierung.
Abfragen auf Felder in VARIANT-, OBJECT- und ARRAY-Spalten semistrukturierter Daten, die die folgenden Prädikattypen verwenden:
Gleichheitsprädikate
IN-Prädikate
Prädikate, die ARRAY_CONTAINS-Typen verwenden
Prädikate, die ARRAYS_OVERLAP-Typen verwenden
Prädikate mit Teilzeichenfolgen und regulären Ausdrücken
Prädikate, die auf NULL-Werte prüfen
Weitere Informationen dazu finden Sie unter Beschleunigen von Abfragen auf semistrukturierten Daten durch die Suchoptimierung.
Abfragen, die ausgewählte Geodatenfunktionen mit GEOGRAPHY-Werten verwenden. Weitere Informationen dazu finden Sie unter Beschleunigen von Geodatenabfragen mit der Suchoptimierung.
Sobald Sie die Abfragen identifiziert haben, die vom Suchoptimierungsdienst profitieren können, können Sie für die in diesen Abfragen verwendeten Spalten und Tabellen die Suchoptimierung aktivieren.
Der Suchoptimierungsdienst wird für Benutzer im Allgemeinen unbemerkt im Hintergrund ausgeführt. Abfragen funktionieren auf dieselbe Weise wie ohne Suchoptimierung; einige sind nur schneller. Die Suchoptimierung hat jedoch Auswirkungen auf bestimmte andere Tabellenoperationen. Weitere Informationen dazu finden Sie unter Verwenden von suchoptimierten Tabellen.
Wie funktioniert der Suchoptimierungsdienst?¶
Um die Performance von Suchabfragen zu verbessern, erstellt und verwaltet der Suchoptimierungsdienst eine dauerhafte Datenstruktur, die Suchzugriffspfad genannt wird. Der Suchzugriffspfad verfolgt, welche Werte der Tabellenspalten in jeder der Mikropartitionen gefunden werden könnten, sodass einige Mikropartitionen beim Durchsuchen der Tabelle übersprungen werden können.
Ein im Hintergrund ausgeführter Wartungsdienst ist für das Erstellen und Warten des Suchzugriffspfads verantwortlich:
Wenn Sie die Suchoptimierung aktivieren, erstellt der Wartungsdienst den Suchzugriffspfad und füllt ihn mit den Daten, die zum Ausführen der Suchläufe erforderlich sind.
Das Erstellen des Suchzugriffspfads kann je nach Größe der Tabelle einige Zeit in Anspruch nehmen. Der Wartungsdienst wird im Hintergrund ausgeführt und blockiert keine anderen Operationen auf der Tabelle. Abfragen werden erst dann beschleunigt, wenn der Suchzugriffspfad vollständig erstellt ist.
Wenn Daten in der Tabelle aktualisiert werden (z. B. durch Laden neuer Datasets oder durch DML-Operationen), aktualisiert der Wartungsdienst automatisch den Suchzugriffspfad, um die Änderungen an den Daten widerzuspiegeln.
Wenn Abfragen ausgeführt werden, während der Suchzugriffspfad noch aktualisiert wird, ist die Ausführung der Abfragen möglicherweise langsamer, liefert aber dennoch korrekte Ergebnisse.
Der Fortschritt des Wartungsdienstes jeder Tabelle wird in der Spalte search_optimization_progress
in der Ausgabe von SHOW TABLES angezeigt. Bevor Sie die Leistungsverbesserung der Suchoptimierung für eine neu optimierte Tabelle messen, warten Sie, bis die Spalte anzeigt, dass die Tabelle vollständig optimiert wurde.
Die Wartung der Suchzugriffspfade erfolgt im Hintergrund. Sie brauchen kein virtuelles Warehouse zu erstellen, um den Wartungsdienst zu nutzen. Es entstehen jedoch Kosten für die Speicher- und Computeressourcen der Wartung. Weitere Informationen zu den Kosten finden Sie unter Abschätzen und Verwalten der Kosten für die Suchoptimierung.
Weitere Optionen zur Optimierung der Abfrageleistung¶
Der Suchoptimierungsdienst ist eine von mehreren Möglichkeiten zur Optimierung der Abfrageleistung. Weitere Methoden sind:
Abfragebeschleunigung
Clustering von Tabellen
Erstellen von materialisierten Ansichten (gruppiert oder nicht gruppiert)
Jede dieser Optionen hat unterschiedliche Vorteile, wie die folgende Tabelle zeigt:
Feature |
Unterstützte Abfragetypen |
Anmerkungen |
---|---|---|
Suchoptimierungsdienst |
Der Suchoptimierungsdienst kann die Performance dieser Suchtypen für die unterstützten Datentypen verbessern. |
|
Abfragen mit Filtern oder Aggregation. Wenn die Abfrage LIMIT enthält, muss die Abfrage auch ORDER BY enthalten.
Die Filter müssen hochselektiv sein, und die ORDER BY-Klausel muss eine niedrige Kardinalität haben.
Die Abfragebeschleunigung funktioniert gut bei Ad-hoc-Analysen, Abfragen mit unvorhersehbarem Datenvolumen
und Abfragen mit großen Scans und selektiven Filtern.
|
Abfragebeschleunigung und Suchoptimierung ergänzen sich gegenseitig. Beide können die gleiche Abfrage beschleunigen. Siehe Kompatibilität mit Abfragebeschleunigung. |
|
|
Sie können materialisierte Ansichten auch verwenden, um verschiedene Gruppierungsschlüssel für dieselbe Quelltabelle (oder eine Teilmenge dieser Tabelle) zu definieren oder um vereinfachte JSON- oder Variant-Daten zu speichern, damit sie nur einmal vereinfacht werden müssen. Die Performance kann nur für die Teilmenge der Zeilen und Spalten verbessert werden, die in der materialisierten Ansicht enthalten sind. |
|
|
Eine Tabelle kann jedoch nur auf einem einzigen Schlüssel gruppiert werden, der eine oder mehrere Spalten oder Ausdrücke umfassen kann. |
In der folgenden Tabelle wird zeigt, welche dieser Optimierungsverfahren Speicher- oder Computekosten verursachen:
Speicherkosten |
Computekosten |
|
---|---|---|
Suchoptimierungsdienst |
✔ |
✔ |
Query Acceleration Service |
✔ |
|
Materialisierte Ansicht |
✔ |
✔ |
Clustering der Tabelle |
✔ [1] |
✔ |
Kompatibilität mit Abfragebeschleunigung¶
Suchoptimierung und Abfragebeschleunigung können zusammen genutzt werden, um die Abfrageleistung zu optimieren. Erstens kann die Suchoptimierung die Mikropartitionen entfernen, die für eine Abfrage nicht benötigt werden. Dann kann die Abfragebeschleunigung für in Frage kommende Abfragen einen Teil der verbleibenden Verarbeitung auf freigegebene Computeressourcen verlagern, die vom Dienst bereitgestellt werden.
Die Verarbeitungsleistung von Abfragen, die durch beide Dienste beschleunigt werden, variiert je nach Workload und verfügbaren Ressourcen.
Beispiele¶
Beginnen Sie, indem Sie eine Tabelle mit Daten erstellen:
create or replace table test_table (id int, c1 int, c2 string, c3 date) as
select * from values
(1, 3, '4', '1985-05-11'),
(2, 4, '3', '1996-12-20'),
(3, 2, '1', '1974-02-03'),
(4, 1, '2', '2004-03-09'),
(5, null, null, null);
Fügen Sie die SEARCH OPTIMIZATION-Eigenschaft zur Tabelle hinzu.
alter table test_table add search optimization;
Die folgenden Abfragen können den Suchoptimierungsdienst verwenden:
select * from test_table where id = 2;
select * from test_table where c2 = '1';
select * from test_table where c3 = '1985-05-11';
select * from test_table where c1 is null;
select * from test_table where c1 = 4 and c3 = '1996-12-20';
Bei der folgenden Abfrage kann der Suchoptimierungsdienst verwendet werden, da die implizite Umwandlung auf der Konstante und nicht auf der Spalte erfolgt:
select * from test_table where c2 = 2;
Im Folgenden kann der Suchoptimierungsdienst nicht verwendet werden, da die Umwandlung auf der Tabellenspalte erfolgt:
select * from test_table where cast(c2 as number) = 2;
Eine IN-Klausel wird vom Suchoptimierungsdienst unterstützt:
select id, c1, c2, c3
from test_table
where id IN (2, 3)
order by id;
Wenn einzelne Prädikate vom Suchoptimierungsdienst unterstützt werden, können sie mit der Konjunktion AND
verknüpft werden und werden dennoch vom Suchoptimierungsdienst unterstützt:
select id, c1, c2, c3
from test_table
where c1 = 1
and
c3 = TO_DATE('2004-03-09')
order by id;
DELETE und UPDATE (und MERGE) sind ebenfalls mit dem Suchoptimierungsdienst kompatibel:
delete from test_table where id = 3;
update test_table set c1 = 99 where id = 4;