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:

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.

Query Acceleration Service

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.

Materialisierte Ansicht

  • Gleichheitssuche

  • Bereichssuche

  • Sortieroperationen

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.

Clustering der Tabelle

  • Gleichheitssuche

  • Bereichssuche

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

1

Der Reclustering-Prozess kann die Größe des Fail-safe-Speichers erhöhen, da bestehende Partitionen in neue Partitionen umgeschrieben werden. (Reclustering führt keine neuen Zeilen ein, sondern reorganisiert nur bestehende Zeilen) Weitere Details dazu finden Sie unter Auswirkung von Reclustering auf Credit- und Speicherverbrauch.

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);
Copy

Fügen Sie die SEARCH OPTIMIZATION-Eigenschaft zur Tabelle hinzu.

alter table test_table add search optimization;
Copy

Die folgenden Abfragen können den Suchoptimierungsdienst verwenden:

select * from test_table where id = 2;
Copy
select * from test_table where c2 = '1';
Copy
select * from test_table where c3 = '1985-05-11';
Copy
select * from test_table where c1 is null;
Copy
select * from test_table where c1 = 4 and c3 = '1996-12-20';
Copy

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;
Copy

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;
Copy

Eine IN-Klausel wird vom Suchoptimierungsdienst unterstützt:

select id, c1, c2, c3
    from test_table
    where id IN (2, 3)
    order by id;
Copy

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;
Copy

DELETE und UPDATE (und MERGE) sind ebenfalls mit dem Suchoptimierungsdienst kompatibel:

delete from test_table where id = 3;
Copy
update test_table set c1 = 99 where id = 4;
Copy