Beschleunigung von Textabfragen durch Suchoptimierung

Die Suchoptimierung kann die Leistung von Abfragen verbessern, die die Funktionen SEARCH und SEARCH_IP verwenden. Diese Abfragen suchen nach Zeichendaten (Text) und IPv4-Adressen in bestimmten Spalten aus einer oder mehreren Tabellen, einschließlich Felder in den Spalten VARIANT, OBJECT und ARRAY.

Bemerkung

Sie müssen dieses Feature für bestimmte Spalten mit der ON-Klausel im Befehl ALTER TABLE … ADD SEARCH OPTIMIZATION aktivieren. Beispiel:

ALTER TABLE lines ADD SEARCH OPTIMIZATION
  ON FULL_TEXT(play, character, line);
Copy

Die Textsuche wird nicht optimiert, wenn Sie die ON-Klausel weglassen.

Weitere Details dazu finden Sie in den folgenden Abschnitten:

Bedingungen für die Laufzeitnutzung der Optimierung der FULL_TEXT-Suche

Nachdem Sie die FULL_TEXT-Suchoptimierung für eine Tabelle aktiviert haben, die mit der Funktion SEARCH abgefragt wird, kann der Suchzugriffspfad für die Optimierung während der Planung und Ausführung der Abfrage verwendet werden. Die folgenden Bedingungen müssen erfüllt sein:

  • Die Suchoptimierung muss einsatzbereit sein (active-Spalte = TRUE in der Ausgabe DESCRIBE SEARCH OPTIMIZATION).

  • Die Suchoptimierung muss für eine Obermenge der im Prädikat SEARCH angegebenen Spalten aktiviert werden. Wenn zum Beispiel eine Tabelle VARCHAR-Spalten c1,c2,c3,c4,c5 enthält, die Suchoptimierung Spalten c1,c2,c3 abdeckt und die Funktion eine, zwei oder drei dieser Spalten durchsucht (aber nicht c4 oder c5), kann die Abfrage von der FULL_TEXT-Suchoptimierung profitieren.

  • Der Analysator, der für die Suchoptimierung im Befehl ALTER TABLE definiert wurde, muss mit dem im Funktionsaufruf SEARCH angegebenen Analysator übereinstimmen.

Tipp

Um herauszufinden, ob ein bestimmter Suchzugriffspfad für eine Abfrage verwendet wurde, suchen Sie im Abfrageprofil nach einem Search Optimization Access-Knoten.

Beispiele für die ADD- (und DROP-) Optimierung der FULL_TEXT-Suche

Die folgenden Beispiele zeigen, wie Sie die FULL_TEXT-Suchoptimierung für Spalten in einer Tabelle aktivieren, um die Abfrageleistung zu verbessern, wenn die SEARCH-Funktion zur Abfrage dieser Spalten verwendet wird.

FULL_TEXT-Suchoptimierung mit einem bestimmten Analysator aktivieren

Das folgende Beispiel aktiviert die Optimierung der FULL_TEXT-Suche für eine Spalte und gibt einen Analysator an. Die Kombination aus Optimierungstyp und Analysator (method) spiegelt sich in der Ausgabe von DESCRIBE wider.

ALTER TABLE lines ADD SEARCH OPTIMIZATION
  ON FULL_TEXT(line, ANALYZER => 'UNICODE_ANALYZER');
Copy
DESCRIBE SEARCH OPTIMIZATION ON lines;
Copy
+---------------+----------------------------+--------+------------------+--------+
| expression_id | method                     | target | target_data_type | active |
|---------------+----------------------------+--------+------------------+--------|
|             1 | FULL_TEXT UNICODE_ANALYZER | LINE   | VARCHAR(2000)    | true   |
+---------------+----------------------------+--------+------------------+--------+

Wenn Sie die FULL_TEXT-Suchoptimierung für dieselbe Spalte mit dem Standard-Analysator aktivieren, gibt die Ausgabe DESCRIBE zwei Zeilen aus und unterscheidet die beiden Einträge nach Ausdrucks-ID und Methode.

ALTER TABLE lines ADD SEARCH OPTIMIZATION
  ON FULL_TEXT(line);
Copy
DESCRIBE SEARCH OPTIMIZATION ON lines;
Copy
+---------------+----------------------------+--------+------------------+--------+
| expression_id | method                     | target | target_data_type | active |
|---------------+----------------------------+--------+------------------+--------|
|             1 | FULL_TEXT UNICODE_ANALYZER | LINE   | VARCHAR(2000)    | true   |
|             2 | FULL_TEXT DEFAULT_ANALYZER | LINE   | VARCHAR(2000)    | false  |
+---------------+----------------------------+--------+------------------+--------+

FULL_TEXT-Suchoptimierung in einer VARIANT-Spalte aktivieren

Der folgende Befehl aktiviert die Optimierung der FULL_TEXT-Suche in einer VARIANT-Spalte. (Diese car_sales-Tabelle und ihre Daten werden unter Abfragen von semistrukturierten Daten beschrieben.)

ALTER TABLE car_sales ADD SEARCH OPTIMIZATION
  ON FULL_TEXT(src);

DESCRIBE SEARCH OPTIMIZATION ON car_sales;
Copy
+---------------+----------------------------+--------+------------------+--------+
| expression_id | method                     | target | target_data_type | active |
|---------------+----------------------------+--------+------------------+--------|
|             1 | FULL_TEXT DEFAULT_ANALYZER | SRC    | VARIANT          | true   |
+---------------+----------------------------+--------+------------------+--------+

FULL_TEXT-Optimierung von einer oder mehreren Spalten löschen

Sie können die FULL_TEXT-Optimierung für mehrere Spalten aktivieren und dann später die Optimierung für eine oder mehrere dieser Spalten aufheben. Die übrigen Spalten sind noch optimiert.

ALTER TABLE lines ADD SEARCH OPTIMIZATION
  ON FULL_TEXT(play, act_scene_line, character, line, ANALYZER => 'UNICODE_ANALYZER');

DESCRIBE SEARCH OPTIMIZATION ON lines;
Copy
+---------------+----------------------------+----------------+------------------+--------+
| expression_id | method                     | target         | target_data_type | active |
|---------------+----------------------------+----------------+------------------+--------|
|             1 | FULL_TEXT UNICODE_ANALYZER | PLAY           | VARCHAR(50)      | true   |
|             2 | FULL_TEXT UNICODE_ANALYZER | ACT_SCENE_LINE | VARCHAR(10)      | true   |
|             3 | FULL_TEXT UNICODE_ANALYZER | CHARACTER      | VARCHAR(30)      | true   |
|             4 | FULL_TEXT UNICODE_ANALYZER | LINE           | VARCHAR(2000)    | true   |
+---------------+----------------------------+----------------+------------------+--------+
ALTER TABLE lines DROP SEARCH OPTIMIZATION ON 1, 2, 3;
Copy
DESCRIBE SEARCH OPTIMIZATION ON lines;
Copy
+---------------+----------------------------+--------+------------------+--------+
| expression_id | method                     | target | target_data_type | active |
|---------------+----------------------------+--------+------------------+--------|
|             4 | FULL_TEXT UNICODE_ANALYZER | LINE   | VARCHAR(2000)    | true   |
+---------------+----------------------------+--------+------------------+--------+

Verwenden Sie den Platzhalter (*), um die Suchoptimierung für alle qualifizierten Spalten zu aktivieren

Der folgende ALTER TABLE-Befehl aktiviert die Optimierung der FULL_TEXT-Suche für alle vier VARCHAR-Spalten in der Tabelle lines:

ALTER TABLE lines ADD SEARCH OPTIMIZATION
  ON FULL_TEXT(*);
Copy
DESCRIBE SEARCH OPTIMIZATION ON lines;
Copy
+---------------+----------------------------+----------------+------------------+--------+
| expression_id | method                     | target         | target_data_type | active |
|---------------+----------------------------+----------------+------------------+--------|
|             1 | FULL_TEXT DEFAULT_ANALYZER | PLAY           | VARCHAR(50)      | true   |
|             2 | FULL_TEXT DEFAULT_ANALYZER | ACT_SCENE_LINE | VARCHAR(10)      | true   |
|             3 | FULL_TEXT DEFAULT_ANALYZER | CHARACTER      | VARCHAR(30)      | true   |
|             4 | FULL_TEXT DEFAULT_ANALYZER | LINE           | VARCHAR(2000)    | true   |
+---------------+----------------------------+----------------+------------------+--------+

Erwarteter Fehler bei der Aktivierung der FULL_TEXT-Optimierung

Der folgende ALTER TABLE-Befehl schlägt mit einem erwarteten Fehler fehl, da eine der angegebenen Spalten eine NUMBER-Spalte ist:

ALTER TABLE lines ADD SEARCH OPTIMIZATION
  ON FULL_TEXT(play, speech_num, act_scene_line, character, line);
Copy
001128 (42601): SQL compilation error: error line 1 at position 76
Expression FULL_TEXT(IDX_SRC_TABLE.SPEECH_NUM) cannot be used in search optimization.