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 müssen kein virtuelles Warehouse erstellen, um den Dienst auszuführen. 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. Die folgende Liste zeigt andere Methoden:

  • Abfragebeschleunigung

  • Erstellen von materialisierten Ansichten (gruppiert oder nicht gruppiert)

  • Clustering von Tabellen

Weitere Informationen dazu finden Sie unter Optimieren der Abfrageleistung.

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 der Tabelle die Eigenschaft SEARCH OPTIMIZATION mit ALTER TABLE 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

Die folgende kann nicht den Suchoptimierungsdienst verwenden, da der Cast in der Spalte der Tabelle liegt:

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