Auffüllen eines Volltextindexes

Das Erstellen und Verwalten eines Volltextindexes umfasst auch das Auffüllen des Indexes in einem Prozess, der als Auffüllung (oder als Crawl) bezeichnet wird. SQL Server unterstützt die folgenden Auffüllungstypen: vollständige Auffüllungen, automatische oder manuelle Auffüllungen mithilfe der Änderungsnachverfolgung sowie inkrementelle, auf Zeitstempel basierende Auffüllungen.

Vollständige Auffüllung

Während einer vollständigen Auffüllung werden Indexeinträge für alle Zeilen einer Tabelle oder einer indizierten Sicht erstellt. Eine vollständige Auffüllung eines Volltextindexes erstellt Indexeinträge für alle Zeilen der Basistabelle oder der indizierten Sicht.

Standardmäßig füllt SQL Server einen neuen Volltextindex vollständig auf, sobald er erstellt wird. Die vollständige Auffüllung kann jedoch eine deutliche Beanspruchung der Ressourcen bedeuten. Beim Erstellen eines Volltextindexes zu Zeiten mit hohen Lastwerten wird daher empfohlen, die vollständige Auffüllung bis zu einem späteren Zeitpunkt mit geringerer Auslastung zu verzögern, insbesondere, wenn die Basistabelle eines Volltextindexes sehr groß ist. Der Volltextkatalog ist dann allerdings bis zum Abschluss der vollständigen Auffüllung der zugehörigen Volltextindizes nicht verfügbar. Wenn Sie einen Volltextindex ohne eine sofortige Auffüllung des Indexes erstellen möchten, geben Sie die Klausel CHANGE_TRACKING OFF, NO POPULATION in der CREATE FULLTEXT INDEX-Transact-SQL-Anweisung an. SQL Server wird den neuen Volltextindex erst auffüllen, wenn Sie eine ALTER FULLTEXT INDEX-Transact-SQL-Anweisung mit der Klausel START FULL POPULATION oder START INCREMENTAL POPULATION ausführen. Weitere Informationen finden Sie unter den Beispielen A. Erstellen eines Volltextindexes ohne Ausführung der vollständigen Auffüllung und B. Ausführen einer vollständigen Auffüllung einer Tabelle weiter unten in diesem Thema.

Auffüllung mithilfe von Änderungsnachverfolgung

Optional können Sie die Änderungsnachverfolgung verwenden, um nach seiner ursprünglichen vollständigen Auffüllung einen Volltextindex beizubehalten. Die Änderungsnachverfolgung bedeutet einen geringen zusätzlichen Leistungsaufwand, da SQL Server eine Tabelle verwaltet, in der Änderungen der Basistabelle seit der letzten Auffüllung verfolgt werden. Beim Verwenden der Änderungsnachverfolgung registriert SQL Server die Zeilen in der Basistabelle oder indizierten Sicht, die durch Aktualisierungen, Löschungen oder Einfügungen geändert wurden. Datenänderungen durch WRITETEXT und UPDATETEXT werden im Volltextindex nicht wiedergegeben und bei der Änderungsnachverfolgung nicht ausgewählt.

HinweisHinweis

Für Tabellen, die eine timestamp-Spalte enthalten, können Sie inkrementelle Auffüllungen verwenden.

Wenn die Änderungsnachverfolgung während der Indexerstellung aktiviert ist, führt SQL Server die vollständige Auffüllung des neuen Volltextindexes unmittelbar nach dessen Erstellung aus. Danach werden Änderungen nachverfolgt und an den Volltextindex weitergegeben. Es gibt zwei Typen der Änderungsnachverfolgung, automatisch (Option CHANGE_TRACKING AUTO) und manuell (Option CHANGE_TRACKING MANUAL). Die automatische Änderungsnachverfolgung ist das Standardverhalten.

Der Typ der Änderungsnachverfolgung bestimmt, wie der Volltextindex aufgefüllt wird, wie im Folgenden dargestellt:

  • Automatische Auffüllung

    Wenn Sie CHANGE_TRACKING AUTO angeben, verwendet das Volltextmodul automatische Auffüllung für den Volltextindex. Nachdem die ursprüngliche vollständige Auffüllung abgeschlossen wurde, werden Änderungen nachverfolgt und automatisch weitergegeben, wenn Daten in der Basistabelle geändert werden. Der Volltextindex wird im Hintergrund aktualisiert. Die so weitergegebenen Änderungen werden u. U. jedoch nicht sofort im Index wiedergegeben.

    So richten Sie die Nachverfolgung von Änderungen mit automatischer Auffüllung ein

    Weitere Informationen finden Sie unter Beispiel E. Änderung eines Volltextindexes zur Verwendung der automatischen Änderungsnachverfolgung weiter unten in diesem Thema.

  • Manuelle Auffüllung

    Wenn Sie CHANGE_TRACKING MANUAL angeben, verwendet das Volltextmodul die manuelle Auffüllung für den Volltextindex. Nachdem die ursprüngliche vollständige Auffüllung abgeschlossen wurde, werden Änderungen nachverfolgt, wenn Daten in der Basistabelle geändert werden. Sie werden jedoch nicht an den Volltextindex weitergegeben, bis Sie eine ALTER FULLTEXT INDEX … START UPDATE POPULATION-Anweisung ausführen. Sie können den SQL Server-Agent verwenden, um die Transact-SQL-Anweisung in regelmäßigen Abständen aufzurufen.

    So beginnen Sie die Änderungsnachverfolgung mit manueller Auffüllung

    Weitere Informationen finden Sie unter den Beispielen C. Erstellen eines Volltextindexes mit manueller Änderungsnachverfolgung und D. Ausführung einer manuellen Auffüllung weiter unten in diesem Thema.

So schalten Sie die Änderungsnachverfolgung aus

Inkrementelle, auf Timestamps basierende Auffüllung

Eine inkrementelle Auffüllung ist ein alternativer Mechanismus zum manuellen Auffüllen eines Volltextindexes. Sie können eine inkrementelle Auffüllung für einen Volltextindex ausführen, für den CHANGE_TRACKING auf den Wert MANUAL oder OFF festgelegt ist. Wenn es sich bei der ersten Auffüllung eines Volltextindexes um eine inkrementelle Auffüllung handelt, werden alle Zeilen indiziert. Damit entspricht die Auffüllung einer vollständigen Auffüllung.

Voraussetzung für die inkrementelle Auffüllung ist, dass die indizierte Tabelle eine Spalte vom timestamp-Datentyp aufweist. Ist keine timestamp-Spalte vorhanden, kann die inkrementelle Auffüllung nicht ausgeführt werden. Eine Anforderung für eine inkrementelle Auffüllung für eine Tabelle ohne timestamp-Spalte führt zu einer vollständigen Auffüllung. Anforderungen für eine inkrementelle Auffüllung werden als vollständige Auffüllung implementiert, wenn sich Metadaten, die sich auf den Volltextindex für die Tabelle auswirken, seit der letzten Auffüllung geändert haben. Dies umfasst Metadatenänderungen durch Spalten-, Index- oder Volltextindexdefinitionen.

SQL Server verwendet die timestamp-Spalte, um Zeilen zu identifizieren, die sich seit der letzten Auffüllung geändert haben. Bei der inkrementellen Auffüllung wird der Volltextindex bezüglich der Zeilen aktualisiert, die seit der letzten Auffüllung oder während des letzten Auffüllungsvorgangs hinzugefügt, gelöscht oder geändert wurden. Wenn in einer Tabelle sehr viele Einfügungen stattfinden, ist die inkrementelle Auffüllung ggf. effizienter als die manuelle Auffüllung.

Am Ende einer Auffüllung wird vom Volltextsuchmodul ein neuer timestamp-Wert aufgezeichnet. Dieser Wert entspricht dem größten in SQL Gatherer aufgetretenen timestamp-Wert. Der Wert wird verwendet, wenn eine nachfolgende inkrementelle Auffüllung gestartet wird.

Um eine inkrementelle Auffüllung auszuführen, führen Sie eine ALTER FULLTEXT INDEX-Anweisung mit der Klausel START INCREMENTAL POPULATION aus.

So planen Sie einen inkrementellen Auffüllungsauftrag

Beispiele

HinweisHinweis

Die Beispiele in diesem Abschnitt verwenden die Production.Document-Tabelle oder die HumanResources.JobCandidate-Tabelle der AdventureWorks2008R2-Beispieldatenbank.

A. Erstellen eines Volltextindexes ohne Ausführung der vollständigen Auffüllung

Im folgenden Beispiel wird ein Volltextindex für die Production.Document-Tabelle der AdventureWorks2008R2-Beispieldatenbank erstellt. In diesem Beispiel wird WITH CHANGE_TRACKING OFF, NO POPULATION verwendet, um die erste vollständige Auffüllung zu verzögern.

CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);
CREATE FULLTEXT CATALOG AW_Production_FTCat;
CREATE FULLTEXT INDEX ON Production.Document
(
    Document                         --Full-text index column name 
        TYPE COLUMN FileExtension    --Name of column that contains file type information
        Language 1033                 --1033 is LCID for the English language
)
    KEY INDEX ui_ukDoc
    ON AW_Production_FTCat
    WITH CHANGE_TRACKING OFF, NO POPULATION;
GO

B. Ausführen einer vollständigen Auffüllung einer Tabelle

Im folgenden Beispiel wird eine vollständige Auffüllung der Production.Document-Tabelle der AdventureWorks2008R2-Beispieldatenbank ausgeführt.

ALTER FULLTEXT INDEX ON Production.Document
   START FULL POPULATION;

C. Erstellen eines Volltextindexes mit manueller Änderungsnachverfolgung

Im folgenden Beispiel wird ein Volltextindex mit Änderungsnachverfolgung und manueller Auffüllung für die HumanResources.JobCandidate-Tabelle der AdventureWorks2008R2-Beispieldatenbank erstellt.

USE AdventureWorks2008R2;
GO
CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume) 
   KEY INDEX ui_ukJobCand 
   WITH CHANGE_TRACKING=MANUAL;
GO

D. Ausführen einer manuellen Auffüllung

Im folgenden Beispiel wird eine manuelle Auffüllung des Volltextindexes mit Änderungsnachverfolgung für die HumanResources.JobCandidate-Tabelle der AdventureWorks2008R2-Beispieldatenbank ausgeführt.

USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;
GO

E. Umstellen eines Volltextindexes auf die automatische Änderungsnachverfolgung

Im folgenden Beispiel wird der Volltextindex für die HumanResources.JobCandidate-Tabelle der AdventureWorks2008R2-Beispieldatenbank so geändert, dass dieser die automatische Auffüllung mit Änderungsnachverfolgung verwendet.

USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;
GO