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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Daten abfragen und ändern » Daten abfragen » 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.

Hinweise zur Festlegung des Aktualisierungstyps finden Sie unter CREATE TEXT INDEX-Anweisung und ALTER TEXT INDEX-Anweisung.

  • Sofort-Aktualisierung (Standardwert)   Textindizes mit sofortiger Aktualisierung werden aktualisiert, wenn sich die Daten in den darunterliegenden Tabellen ändern, und sind nur zu empfehlen, wenn die Daten stets auf dem letzten Stand sein müssen oder die Spalten mit Index verhältnismäßig kurz sind.

    Der Standard-Aktualisierungstyp für Textindizes ist "Sofort".

    Wenn Sie einen automatisch oder manuell aktualisierten Textindex verwenden, können Sie ihn nicht zu einem Textindex mit sofortiger Aktualisierung ändern. Statt dessen müssen Sie ihn löschen und ihn als Textindex mit sofortiger Aktualisierung neu erstellen.

    Textindizes mit sofortiger Aktualisierung 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.

  • Automatische Aktualisierung   Textindizes mit automatischer Aktualisierung 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.

    Textindizes mit automatischer Aktualisierung können häufiger als zum angegebenen Intervall aktualisiert werden, wenn eine der beiden folgenden Bedingungen zutrifft: Die Zeitspanne seit der letzten Aktualisierung ist größer als das Aktualisierungsintervall oder die Gesamtlänge aller ausstehenden Zeilen (pending_length, wie von der Systemprozedur sa_text_index_stats zurückgegeben) überschreitet 20% der Index-Gesamtgröße (doc_length, wie von sa_text_index_stats zurückgegeben).

    Textindizes mit automatischer Aktualisierung werden unter Verwendung der Isolationsstufe 0 aktualisiert.

    Ein Textindex mit automatischer Aktualisierung 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 Textindex mit automatischer Aktualisierung auch manuell mit der REFRESH TEXT INDEX-Anweisung aktualisieren.

    Textindizes mit automatischer Aktualisierung werden während eines Neuladens nur aktualisiert, wenn die Option -g für dbunload angegeben ist. Weitere Hinweise finden Sie unter Entladen-Dienstprogramm (dbunload).

  • Manuelle Aktualisierung   Textindizes mit manueller Aktualisierung werden nur aktualisiert, wenn Sie sie aktualisieren, und sind zu empfehlen, wenn Daten in der darunterliegenden Tabelle kaum 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 Textindizes mit manueller Aktualisierung festlegen. Sie können beispielsweise ein Verfahren benutzen, das alle Textindizes mit manueller Aktualisierung unter Verwendung eines Aktualisierungsintervalls aktualisiert, das als Argument übergeben wird, und Regeln verwenden, die jenen gleichen, die bei Textindizes mit automatischer Aktualisierung benutzt werden.

    Im folgenden Beispiel ersetzen Sie Textindexname, Tabelleneigentümer und Tabellenname.

    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. Weitere Hinweise finden Sie unter sa_text_index_stats-Systemprozedur.

    Ein Textindex mit manueller Aktualisierung enthält zum Zeitpunkt seiner Erstellung keine Daten und steht erst zur Verfügung, wenn Sie ihn aktualisiert haben. Um einen Textindex mit manueller Aktualisierung zu aktualisieren, verwenden Sie die Anweisung REFRESH TEXT INDEX.

    Textindizes mit manueller Aktualisierung werden während des Neuladens nur aktualisiert, wenn die Option -g für dbunload angegeben ist. Weitere Hinweise finden Sie unter Entladen-Dienstprogramm (dbunload).

Siehe auch