Wenn Sie einen Textindex erstellen, müssen Sie auch einen Aktualisierungstyp auswählen. Es gibt drei Aktualisierungstypen, die bei Textindizes unterstützt werden: Sofort, Automatisch und Manuell. Sie legen den Aktualisierungstyp für einen Textindex während seiner Erstellung fest. Abgesehen von sofortigen Textindizes können Sie den Aktualisierungstyp ändern, nachdem der Textindex erstellt wurde.
IMMEDIATE REFRESH IMMEDIATE REFRESH-Textindizes werden aktualisiert, wenn sich die Daten in den zugrunde liegenden Tabellen ändern, und sind nur zu empfehlen, wenn die Daten stets auf dem letzten Stand sein müssen, die Spalten mit Index verhältnismäßig kurz sind oder nur selten Datenänderungen vorgenommen werden.
Der Standard-Aktualisierungstyp für Textindizes ist IMMEDIATE REFRESH.
Wenn Sie einen AUTO REFRESH- oder MANUAL REFRESH-Textindex verwenden, können Sie ihn nicht zu einem IMMEDIATE REFRESH-Textindex ändern. Stattdessen müssen Sie ihn löschen und ihn als IMMEDIATE REFRESH-Textindex neu erstellen.
IMMEDIATE REFRESH-Textindizes unterstützen alle Isolationsstufen. Sie werden zum Zeitpunkt der Erstellung mit Daten gefüllt und während dieses erstmaligen Neuaufbaus gilt eine Exklusivsperre für die Tabelle.
AUTO REFRESH AUTO REFRESH-Textindizes werden automatisch in von Ihnen angegebenen Intervallen aktualisiert und sind zu empfehlen, wenn eine gewisse Datenveraltung akzeptabel ist. Eine Abfrage in einem veralteten Index gibt Daten zurück, die seit der letzten Aktualisierung nicht geändert wurden. Entsprechend werden Zeilen, die seit der letzten Aktualisierung eingefügt, gelöscht oder aktualisiert wurden, von einer Abfrage nicht zurückgegeben.
AUTO REFRESH-Textindizes werden möglicherweise auch häufiger als mit dem angegebenen Intervall aktualisiert, wenn mindestens eine der folgenden Bedingungen erfüllt ist:
Die Zeitspanne seit der letzten Aktualisierung ist länger als das Aktualisierungsintervall.
Die Gesamtlänge aller ausstehenden Zeilen (pending_length wie von der Systemprozedur sa_text_index_stats zurückgegeben) überschreitet 20 % der Gesamtgröße des Indexes (doc_length wie von sa_text_index_stats zurückgegeben).
Die gelöschte Länge stellt über 50 % der Gesamtgröße des Indexes dar (doc_length). In diesem Fall wird immer ein vollständiger Neuaufbau ausgeführt und keine inkrementelle Aktualisierung.
AUTO REFRESH-Textindizes werden unter Verwendung der Isolationsstufe 0 aktualisiert.
Ein AUTO REFRESH-Textindex enthält keine Daten zum Zeitpunkt seiner Erstellung und steht erst nach der ersten Aktualisierung zur Verfügung, die üblicherweise innerhalb der ersten Minute nach der Erstellung des Textindexes stattfindet. Sie können einen AUTO REFRESH-Textindex auch manuell mit der REFRESH TEXT INDEX-Anweisung aktualisieren.
AUTO REFRESH-Textindizes werden während eines Neuladens nur aktualisiert, wenn die -g-Option für dbunload angegeben ist.
MANUAL REFRESH MANUAL REFRESH-Textindizes werden nur aktualisiert, wenn Sie sie aktualisieren, und sind zu empfehlen, wenn Daten in der zugrunde liegenden Tabelle selten geändert werden, ein höherer Grad von Datenveraltung akzeptabel ist oder Sie eine Aktualisierung nach einem Ereignis oder einer erfüllten Bedingung durchführen wollen. Eine Abfrage in einem veralteten Index gibt Daten zurück, die seit der letzten Aktualisierung nicht geändert wurden. Entsprechend werden Zeilen, die seit der letzten Aktualisierung eingefügt, gelöscht oder aktualisiert wurden, von einer Abfrage nicht zurückgegeben.
Sie können Ihre eigene Strategie zur Aktualisierung von MANUAL REFRESH-Textindizes festlegen. Im folgenden Beispiel werden alle MANUAL REFRESH-Textindizes unter Verwendung eines als Argument übergebenen Aktualisierungsintervalls und von Regeln, die den für AUTO REFRESH-Textindizes verwendeten Regeln ähneln, aktualisiert.
CREATE PROCEDURE refresh_manual_text_indexes( refresh_interval UNSIGNED INT ) BEGIN FOR lp1 AS c1 CURSOR FOR SELECT ts.* FROM SYS.SYSTEXTIDX ti JOIN sa_text_index_stats( ) ts ON ( ts.index_id = ti.index_id ) WHERE ti.refresh_type = 1 -- manual refresh indexes only DO BEGIN IF last_refresh IS null OR cast(pending_length as float) / ( IF doc_length=0 THEN NULL ELSE doc_length ENDIF) > 0.2 OR DATEDIFF( MINUTE, CURRENT TIMESTAMP, last_refresh ) > refresh_interval THEN EXECUTE IMMEDIATE 'REFRESH TEXT INDEX ' || Textindexname || ' ON "' || Tabelleneigentümer || '"."' || Tabellenname || '"'; END IF; END; END FOR; END; |
Sie können die Systemprozedur sa_text_index_stats jederzeit verwenden, um zu entscheiden, ob eine Aktualisierung erforderlich ist und ob die Aktualisierung ein vollständiger Neuaufbau oder ein inkrementelles Aktualisieren sein soll.
Ein MANUAL REFRESH-Textindex enthält zum Zeitpunkt seiner Erstellung keine Daten und steht erst zur Verfügung, wenn Sie ihn aktualisiert haben. Um einen MANUAL REFRESH-Textindex zu aktualisieren, verwenden Sie die Anweisung REFRESH TEXT INDEX.
MANUAL REFRESH-Textindizes werden während des Neuladens nur aktualisiert, wenn die -g-Option für dbunload angegeben ist.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |