Beschleunigen von Abfragen mit Teilzeichenfolgen und regulären Ausdrücken mit der Suchoptimierung

Die Suchoptimierung kann die Leistung von Abfragen mit Prädikaten verbessern, die in Textdaten oder semistrukturierten Daten nach Teilzeichenfolgen suchen oder reguläre Ausdrücke verwenden. Weitere Informationen zur Funktionsweise der Suche nach Teilzeichenfolgen in semistrukturierten Daten finden Sie unter Beschleunigen von Abfragen auf semistrukturierten Daten durch die Suchoptimierung.

Diese Fähigkeit umfasst Prädikate, die Folgendes verwenden:

Bemerkung

Sie müssen dieses Feature für bestimmte Spalten mit der ON-Klausel im Befehl ALTER TABLE … ADD SEARCH OPTIMIZATION aktivieren. (Wenn Sie die Suchoptimierung auf Tabellenebene aktivieren, wird die Suche nach Teilzeichenfolgen nicht optimiert.) Beispiel:

ALTER TABLE mytable ADD SEARCH OPTIMIZATION ON SUBSTRING(mycol);
Copy

Suchläufe nach Teilzeichenfolgen werden nur optimiert, wenn Sie die ON-Klausel verwenden.

Der Suchoptimierungsdienst kann die Leistung bei der Suche nach Teilzeichenfolgen verbessern, die 5 oder mehr Zeichen lang sind. (Selektivere Teilzeichenfolgen können zu einer besseren Leistung führen.) Der Suchoptimierungsdienst verwendet für das folgende Prädikat keine Suchzugriffspfade, da die Teilzeichenfolge kürzer als 5 Zeichen ist:

LIKE '%TEST%'
Copy

Für das folgende Prädikat kann der Suchoptimierungsdienst die Abfrage optimieren, indem für die Suche nach den Teilzeichenfolgen für SEARCH und OPTIMIZED Suchzugriffspfade verwendet werden. Die Suchzugriffspfade werden jedoch nicht für IS verwendet, da die Teilzeichenfolge kürzer als 5 Zeichen ist.

LIKE '%SEARCH%IS%OPTIMIZED%'
Copy

Bei Abfragen, die RLIKE, REGEXP und REGEXP_LIKE verwenden, gilt Folgendes:

  • Das Argument subject muss eine TEXT-Spalte in einer Tabelle sein, bei der die Suchoptimierung aktiviert ist.

  • Das Argument pattern muss eine Zeichenfolgenkonstante sein.

Bei regulären Ausdrücken funktioniert der Suchoptimierungsdienst in folgenden Fällen am besten:

  • Das Muster enthält mindestens ein Teilzeichenfolgen-Literal, das 5 oder mehr Zeichen lang ist.

  • Das Muster gibt an, dass die Teilzeichenfolge mindestens einmal vorkommen muss.

Das folgende Muster legt zum Beispiel fest, dass string ein oder mehrere Male im „subject“ vorkommen soll:

RLIKE '(string)+'
Copy

Der Suchoptimierungsdienst kann die Leistung von Abfragen mit den folgenden Mustern verbessern, da jedes Prädikat angibt, dass eine Teilzeichenfolge aus 5 oder mehr Zeichen mindestens einmal vorkommen muss. (Beachten Sie, dass im ersten Beispiel eine Zeichenfolgenkonstanten in Dollarzeichen verwendet wird, damit die Backslash-Zeichen nicht mit Escapezeichen umschlossen werden müssen.)

RLIKE $$.*email=[\w\.]+@snowflake\.com.*$$
Copy
RLIKE '.*country=(Germany|France|Spain).*'
Copy
RLIKE '.*phone=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
Copy

Im Gegensatz dazu verwendet die Suchoptimierung keine Suchzugriffspfade bei Abfragen mit den folgenden Mustern:

  • Muster ohne Teilzeichenfolgen:

    RLIKE '.*[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
    
    Copy
  • Muster, die nur Teilzeichenfolgen enthalten, die weniger als 5 Zeichen enthalten:

    RLIKE '.*tel=[0-9]{3}-?[0-9]{3}-?[0-9]{4}.*'
    
    Copy
  • Muster, die den Optionsoperator verwenden, wobei eine Option eine Teilzeichenfolge ist, die weniger als 5 Zeichen enthält:

    RLIKE '.*(option1|option2|opt3).*'
    
    Copy
  • Muster, bei denen die Teilzeichenfolge optional ist:

    RLIKE '.*[a-zA-z]+(string)?[0-9]+.*'
    
    Copy

Auch wenn die Teilzeichenfolgen-Literale weniger als 5 Zeichen enthalten, kann der Suchoptimierungsdienst die Abfrageleistung verbessern, wenn die Erweiterung des regulären Ausdrucks ein Teilzeichenfolgen-Literal ergibt, das 5 Zeichen oder mehr enthält.

Betrachten Sie beispielsweise folgendes Muster:

.*st=(CA|AZ|NV).*(-->){2,4}.*
Copy

In diesem Beispiel:

  • Obwohl die Teilzeichenfolgen-Literale (z. B. st=, CA usw.) kürzer als 5 Zeichen sind, erkennt der Suchoptimierungsdienst, dass die Teilzeichenfolgen st=CA, st=AZ oder st=NV (die jeweils 5 Zeichen lang sind) im Text vorkommen müssen.

  • Auch wenn das Teilzeichenfolgen-Literal --> kürzer als 5 Zeichen ist, stellt der Suchoptimierungsdienst fest, dass die Teilzeichenfolge -->--> (die länger als 5 Zeichen ist) im Text auftreten muss.

Der Suchoptimierungsdienst kann Suchzugriffspfade verwenden, um diese Teilzeichenfolgen abzugleichen, was die Leistung der Abfrage verbessern kann.