Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Abfrage und Änderung von Daten » Volltextsuche » Konzepte und Referenz zu Textindizes

 

Textindex-Aktualisierungstypen

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.

 Siehe auch