Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Das Erstellen und Verwalten eines Volltextindexes umfasst das Auffüllen des Indexes mithilfe eines Prozesses, der als Auffüllung (oder auch als Crawl) bezeichnet wird.
Arten der Population
Ein Volltextindex unterstützt die folgenden Auffüllungstypen:
- Gesamte Population
- Automatische oder manuelle Auffüllung basierend auf der Änderungsnachverfolgung
- Inkrementelle Auffüllung basierend auf einem Zeitstempel
Vollständige Befüllung
Während einer vollständigen Auffüllung werden Indexeinträge für sämtliche Zeilen einer Tabelle oder einer indizierten Sicht aufgebaut. 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 einerseits eine deutliche Beanspruchung der Ressourcen bedeuten. Daher ist es beim Erstellen eines Volltextindexes während Spitzenlastzeiten häufig empfehlenswert, die vollständige Population bis zu einem Zeitpunkt außerhalb der Spitzenlastzeiten zu verschieben, insbesondere wenn die Basistabelle des Volltextindexes groß ist.
- Der Volltextkatalog ist andererseits bis zum Abschluss der vollständigen Auffüllung der zugehörigen Volltextindizes nicht verfügbar.
Geben Sie in der CHANGE_TRACKING OFF, NO POPULATION-Anweisung die CREATE FULLTEXT INDEX-Klausel an, um einen Volltextindex zu erstellen, ohne ihn sofort aufzufüllen. Bei Angabe von CHANGE_TRACKING MANUAL füllt die Volltext-Engine den neuen Volltextindex erst auf, wenn Sie eine ALTER FULLTEXT INDEX-Anweisung mithilfe der START FULL POPULATION- oder START INCREMENTAL POPULATION-Klausel ausführen.
Beispiel: Erstellen eines Volltextindexes ohne Ausführung der vollständigen Auffüllung
Im folgenden Beispiel wird ein Volltextindex für die Production.Document -Tabelle der AdventureWorks -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
Beispiel – Vollständige Populierung einer Tabelle ausführen
Im folgenden Beispiel wird eine vollständige Auffüllung der Production.Document -Tabelle der AdventureWorks -Beispieldatenbank ausgeführt.
ALTER FULLTEXT INDEX ON Production.Document
START FULL POPULATION;
Befüllung basierend auf Änderungsverfolgung
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 verwaltet SQL Server eine Aufzeichnung der Zeilen in der Basistabelle oder indizierten Sicht, die durch Updates, Löschungen oder Einfügungen geändert wurden. Mit WRITETEXT und UPDATETEXT vorgenommene Datenänderungen schlagen sich nicht im Volltextindex nieder und werden von der Änderungsverfolgung nicht erfasst.
Hinweis
Für Tabellen, die eine Zeitstempel-Spalte enthalten, können Sie die inkrementelle Auffüllung anstatt der Änderungsnachverfolgung verwenden.
Wenn Sie die Änderungsnachverfolgung während der Indexerstellung aktivieren, 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.
Änderungsnachverfolgung aktivieren
Es gibt zwei Typen der Änderungsnachverfolgung:
- Automatisch (Option
CHANGE_TRACKING AUTO) Die automatische Änderungsnachverfolgung ist das Standardverhalten. - Manuell (
CHANGE_TRACKING MANUAL-Option).
Der Typ der Änderungsnachverfolgung bestimmt, wie der Volltextindex aufgefüllt wird, wie im Folgenden dargestellt:
Automatische Auffüllung
Standardmäßig oder wenn Sie
CHANGE_TRACKING AUTOangeben, verwendet die Volltext-Engine die automatische Auffüllung für den Volltextindex. Nachdem die anfängliche vollständige Befüllung abgeschlossen ist, werden Änderungen nachverfolgt, sobald Daten in der Basistabelle geändert werden, und die nachverfolgten Änderungen werden automatisch weitergegeben. Der Volltextindex wird im Hintergrund aktualisiert. Die so weitergegebenen Änderungen werden u. U. jedoch nicht sofort im Index wiedergegeben.Starten der Änderungsnachverfolgung mit automatischer Auffüllung
CREATE FULLTEXT INDEX ... WITH CHANGE_TRACKING AUTO
ALTER FULLTEXT INDEX ... SET CHANGE_TRACKING AUTO
Beispiel: Umstellen eines Volltextindexes auf die automatische Änderungsnachverfolgung
Im folgenden Beispiel wird der Volltextindex derHumanResources.JobCandidate-Tabelle derAdventureWorks-Beispieldatenbank so geändert, dass die Änderungsnachverfolgung mit automatischer Auffüllung verwendet wird.USE AdventureWorks; GO ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO; GOManuelle Befüllung
Wenn Sie CHANGE_TRACKING MANUAL angeben, verwendet die Volltext-Engine 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 erst an den Volltextindex übergeben, wenn 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
CREATE FULLTEXT INDEX ... MIT CHANGE_TRACKING MANUELL
ALTER FULLTEXT INDEX ... SET HANDBUCH ZUR ÄNDERUNGSVERFOLGUNG
Beispiel: Erstellen eines Volltextindexes mit manueller Änderungsnachverfolgung
Im folgenden Beispiel wird ein Volltextindex mit Änderungsnachverfolgung und manueller Auffüllung für dieHumanResources.JobCandidate-Tabelle derAdventureWorks-Beispieldatenbank erstellt.USE AdventureWorks; 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; GOBeispiel - Manuelle Befüllung ausführen
Im folgenden Beispiel wird eine manuelle Auffüllung des Volltextindexes mit Änderungsnachverfolgung für dieHumanResources.JobCandidate-Tabelle derAdventureWorks-Beispieldatenbank ausgeführt.USE AdventureWorks; GO ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION; GO
Deaktivieren der Änderungsnachverfolgung
CREATE FULLTEXT INDEX ... WITH CHANGE_TRACKING AUS
ALTER FULLTEXT INDEX ... SET CHANGE_TRACKING AUS
Inkrementelle Auffüllung basierend auf einem Zeitstempel
Eine inkrementelle Auffüllung ist ein alternativer Mechanismus zum manuellen Auffüllen eines Volltextindexes. Wenn in einer Tabelle sehr viele Einfügungen stattfinden, ist die inkrementelle Auffüllung ggf. effizienter als die manuelle Auffüllung.
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.
Voraussetzung für die inkrementelle Auffüllung ist, dass die indizierte Tabelle eine Spalte vom Datentyp timestamp aufweist. Ist keine timestamp -Spalte vorhanden, kann die inkrementelle Auffüllung nicht ausgeführt werden.
SQL Server verwendet die Spalte timestamp, 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. Am Ende einer Auffüllung wird von der Volltext-Engine ein neuer timestamp-Wert aufgezeichnet. Dieser Wert entspricht dem größten in SQL Gatherer gefundenen Zeitstempel-Wert. Der Wert wird verwendet, wenn die nachfolgende inkrementelle Auffüllung gestartet wird.
In einigen Fällen führt die Anforderung für eine inkrementelle Auffüllung zu einer vollständigen Auffüllung.
- Eine Anforderung für eine inkrementelle Auffüllung für eine Tabelle ohne timestamp -Spalte führt zu einer vollständigen Auffüllung.
- Wenn es sich bei der ersten Auffüllung eines Volltextindexes um eine inkrementelle Auffüllung handelt, werden alle Zeilen indiziert und die Auffüllung entspricht damit einer vollständigen Auffüllung.
- Wenn sich seit der letzten Auffüllung Metadaten geändert haben, die den Volltextindex für die Tabelle beeinflussen, werden Anforderungen zur inkrementellen Auffüllung als vollständige Auffüllungen ausgeführt. Dies umfasst Metadatenänderungen, die durch Änderungen an den Definitionen von Spalten, Indizes oder Volltextindizes verursacht werden.
Ausführen einer inkrementellen Auffüllung
Führen Sie mithilfe der ALTER FULLTEXT INDEX-Klausel eine START INCREMENTAL POPULATION-Anweisung aus, um eine inkrementelle Auffüllung auszuführen.
Erstellen oder Ändern eines Zeitplans für die inkrementelle Auffüllung
Erweitern Sie in Management Studio im Objekt-Explorer den Server.
Erweitern Sie Datenbanken, und erweitern Sie dann die Datenbank, die den Volltextindex enthält.
Erweitern Sie Tabellen.
Klicken Sie mit der rechten Maustaste auf die Tabelle, für die der Volltextindex definiert ist. Wählen Sie Volltextindex, und klicken Sie dann im Kontextmenü Volltextindex auf Eigenschaften. Das Dialogfeld Volltextindexeigenschaften wird geöffnet.
Wichtig
Wenn die Basistabelle oder Sicht keine Spalte für den Datentyp Zeitstempel enthält, ist eine inkrementelle Auffüllung nicht möglich.
Wählen Sie im Bereich Seite auswählen die Option Zeitpläne aus.
Verwenden Sie diese Seite, um Zeitpläne für einen SQL Server-Agent-Auftrag zu erstellen oder zu verwalten, der eine inkrementelle Auffüllung der Tabelle für die Basistabelle oder eine indizierte Sicht des Volltextindex startet.
Die folgenden Optionen sind verfügbar:
Um einen neuen Zeitplan zu erstellen, klicken Sie auf Neu.
Das Dialogfeld Neuer Zeitplan für Tabellen-Volltextindizierung wird geöffnet und erlaubt das Erstellen eines neuen Zeitplans. Klicken Sie auf OK, um den Zeitplan zu speichern.
Wichtig
Ein SQL Server-Agent-Auftrag (Inkrementelle Tabellenauffüllung starten für database_name.table_name) wird einem neuen Zeitplan zugeordnet, nachdem Sie das Dialogfeld Eigenschaften von Volltextindex geschlossen haben. Wenn Sie mehrere Zeitpläne für denselben Volltextindex erstellen, greifen sie alle auf dieselbe Aufgabe zu.
Um einen vorhandenen Zeitplan zu ändern, wählen Sie den vorhandenen Zeitplan aus, und klicken Sie auf Bearbeiten.
Das Dialogfeld Neuer Zeitplan für Tabellen-Volltextindizierung wird geöffnet und erlaubt das Bearbeiten des Zeitplans.
Hinweis
Informationen zum Ändern eines Auftrags des SQL Server-Agents finden Sie unter Ändern eines Auftrags.
Um einen vorhandenen Zeitplan zu entfernen, wählen Sie den vorhandenen Zeitplan aus, und klicken Sie auf Löschen.
Wählen Sie OK aus.
Beheben von Fehlern in einer Volltextauffüllung (Durchforstung)
Tritt während eines Crawlvorgangs ein Fehler auf, erstellt und verwaltet die Protokollierungsfunktion für Crawls der Volltextsuche ein Crawlprotokoll, bei dem es sich um eine reine Textdatei handelt. Jedes Crawlprotokoll entspricht einem bestimmten Volltextkatalog. Standardmäßig befinden sich Durchforstungsprotokolle für eine bestimmte Instanz (in diesem Beispiel die Standardinstanz) im Ordner %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG.
Die Crawl-Logdatei folgt folgendem Benennungsschema:
SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]
Die variablen Teile des Dateinamens der Crawling-Protokolldatei sind folgende.
- < DatabaseID> - Die ID einer Datenbank. < dbid> ist eine fünfstellige Zahl mit führenden Nullen.
- < Volltext-Katalog-ID> - Die ID eines Volltextkatalogs. < catid> ist eine fünfstellige Zahl mit führenden Nullen.
- < n> - ist eine ganze Zahl, die angibt, dass ein oder mehrere Crawlprotokolle desselben Volltextkatalogs vorhanden sind.
SQLFT0000500008.2 ist z.B. die Durchforstungsprotokolldatei für eine Datenbank mit der Datenbank-ID = 5 und der Volltextkatalog-ID = 8. Die 2 am Ende des Dateinamens gibt an, dass zwei Durchforstungsprotokolldateien für dieses Datenbank-Katalog-Paar vorhanden sind.
Siehe auch
sys.dm_fts_index_population (Transact-SQL)
Erste Schritte mit der Volltextsuche
Erstellen und Verwalten von Volltextindizes
CREATE FULLTEXT INDEX (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)