Заполнение полнотекстового индекса

Процесс создания и обслуживания полнотекстового индекса называется заполнением (а также сканированием). SQL Server поддерживает следующие типы заполнения: полное заполнение, заполнение на основе отслеживания изменений (автоматическое или вручную) и добавочное заполнение с использованием отметок времени.

Полное заполнение

Во время полного заполнения индексные записи строятся для всех строк таблицы или индексированного представления. Во время полного заполнения полнотекстового индекса индексные записи строятся для всех строк базовой таблицы или индексированного представления.

По умолчанию SQL Server полностью заполняет новый полнотекстовый индекс сразу после его создания. Однако полное заполнение может потреблять значительный объем ресурсов. Поэтому при создании полнотекстовых индексов во время периодов наибольшей потребности в ресурсах часто полезно бывает отложить полное заполнение на период наименьшего потребления ресурсов, особенно если базовая таблица полнотекстового индекса имеет большой размер. Однако полнотекстовый каталог, к которому относится индекс, нельзя использовать, пока не будут заполнены все его полнотекстовые индексы. Чтобы создать полнотекстовый индекс, не заполняя его немедленно, укажите предложение CHANGE_TRACKING OFF, NO POPULATION в инструкции CREATE FULLTEXT INDEX Transact-SQL. SQL Server не будет заполнять новый полнотекстовый индекс до выполнения инструкции ALTER FULLTEXT INDEX Transact-SQL с использованием предложения START FULL POPULATION или START INCREMENTAL POPULATION. Дополнительные сведения см. в примерах «А. Создание полнотекстового индекса без выполнения полного заполнения» и «Б. Выполнение полного заполнения в таблице», приведенных далее в этом разделе.

Заполнение на основе отслеживания изменений

Можно также использовать отслеживание изменений для обслуживания полнотекстового индекса после его первоначального полного заполнения. Это вызывает небольшую нагрузку, связанную с отслеживанием изменений, поскольку SQL Server поддерживает таблицу, в которой выполняется отслеживание изменений в базовой таблице со времени последнего заполнения. При использовании отслеживания изменений SQL Server поддерживает запись строк базовой таблицы или индексированного представления, измененного операциями обновления, удаления или вставки. Изменения данных, внесенные с помощью инструкций WRITETEXT и UPDATETEXT, не отражаются в полнотекстовом индексе и не отмечаются при отслеживании изменений.

ПримечаниеПримечание

Для таблиц, содержащих столбец timestamp, можно использовать добавочное заполнение.

При включении отслеживания изменений во время создания индекса SQL Server полностью заполняет новый полнотекстовый индекс сразу же после его создания. Таким образом, изменения отслеживаются и распространяются в полнотекстовый индекс. Отслеживания изменений выполняется двумя способами: автоматически (параметр CHANGE_TRACKING AUTO) и вручную (параметр CHANGE_TRACKING MANUAL). По умолчанию используется автоматическое отслеживание изменений.

Способ заполнения полнотекстового индекса определяется типом отслеживания изменений.

  • Автоматическое заполнение

    По умолчанию (либо если задан параметр CHANGE_TRACKING AUTO) средство полнотекстового поиска использует автоматическое заполнение полнотекстового индекса. После завершения первоначального полного заполнения изменения отслеживаются по мере изменений данных в базовой таблице, а зарегистрированные изменения распространяются автоматически. Полнотекстовый индекс обновляется в режиме вне сети, однако изменения, распространяемые таким образом, могут не отражаться в индексе сразу.

    Настройка отслеживания изменений с автоматическим заполнением

    Дополнительные сведения см. в примере «Д. Переключение полнотекстового индекса на автоматическое отслеживание изменений» далее в этом разделе.

  • Заполнение вручную

    Если задан параметр CHANGE_TRACKING MANUAL, то средство полнотекстового поиска использует заполнение полнотекстового индекса вручную. После завершения первоначального полного заполнения изменения отслеживаются по мере изменения данных в базовой таблице. Но они не распространяются на полнотекстовый индекс до тех пор, пока не выполнена инструкция ALTER FULLTEXT INDEX … START UPDATE POPULATION. Агент SQL Server можно использовать для периодического вызова инструкции Transact-SQL.

    Запуск отслеживания изменений с заполнением вручную

    Дополнительные сведения см. в примерах «В. Создание полнотекстового индекса с отслеживанием изменений вручную» и «Г. Выполнение заполнения вручную» далее в этом разделе.

Отключение отслеживания изменений

Добавочное заполнение с использованием отметок времени

Добавочное заполнение является альтернативным механизмом по отношению к заполнению полнотекстового индекса вручную. Можно запустить добавочное заполнение для полнотекстового индекса, у которого параметру CHANGE_TRACKING присвоено значение MANUAL или OFF. Если первое заполнение полнотекстового индекса является добавочным, то производится индексирование всех строк, что является эквивалентом полного заполнения.

Для выполнения добавочного заполнения проиндексированная таблица должна включать столбец типа timestamp. Если столбца типа timestamp в таблице нет, добавочное заполнение невозможно. Попытка выполнить добавочное заполнение для таблицы, не содержащей столбец типа timestamp, приведет к полному заполнению. Кроме того, если за время, прошедшее с момента последнего заполнения, изменились какие-либо метаданные, влияющие на полнотекстовый индекс таблицы, то запросы добавочного заполнения реализуются как полное заполнение. Сюда относятся и изменения в метаданных, вызванные изменениями в определениях любых столбцов, индексов или полнотекстовых индексов.

SQL Server определяет строки, которые изменились со времени последнего заполнения, с помощью столбца timestamp. Затем операция добавочного заполнения обновляет полнотекстовый индекс для строк, добавленных, удаленных или измененных после или во время последнего заполнения. Если выполняется большое количество операций вставки в таблицу, то использование добавочного заполнения может быть более эффективным, чем использование заполнения вручную.

По окончании заполнения служба полнотекстового поиска сохраняет новое значение timestamp. Это значение — самое большое значение timestamp, которое встретилось средству сбора данных SQL. Это значение будет использовано в начале последующего добавочного заполнения.

Для запуска добавочного заполнения выполните инструкцию ALTER FULLTEXT INDEX с использованием предложения START INCREMENTAL POPULATION.

Составление расписания выполнения задания добавочного заполнения

Примеры

ПримечаниеПримечание

В примерах в этом разделе используется таблица Production.Document или HumanResources.JobCandidate образца базы данных AdventureWorks2008R2.

A. Создание полнотекстового индекса без выполнения полного заполнения

В следующем примере создается полнотекстовый индекс для таблицы Production.Document образца базы данных AdventureWorks2008R2. В этом примере используется параметр WITH CHANGE_TRACKING OFF, NO POPULATION для задержки первоначального полного заполнения.

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

Б. Выполнение полного заполнения в таблице

В следующем примере полное заполнение выполняется в таблице Production.Document образца базы данных AdventureWorks2008R2.

ALTER FULLTEXT INDEX ON Production.Document
   START FULL POPULATION;

В. Создание полнотекстового индекса с отслеживанием изменений вручную

В следующем примере создается полнотекстовый индекс, который будет использовать отслеживание изменений с заполнением вручную в таблице HumanResources.JobCandidate образца базы данных AdventureWorks2008R2.

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

Г. Выполнение заполнения вручную

В следующем примере выполняется заполнение вручную на полнотекстовом индексе с отслеживанием изменений для таблицы HumanResources.JobCandidate образца базы данных AdventureWorks2008R2.

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

Д. Переключение полнотекстового индекса на автоматическое отслеживание изменений

В следующем примере полнотекстовый индекс таблицы HumanResources.JobCandidate образца базы данных AdventureWorks2008R2 переключается на отслеживание изменений с автоматическим заполнением.

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