フルテキスト インデックスのカタログ作成

フルテキスト インデックスの作成と保持では、カタログ作成 (またはクロール) と呼ばれるプロセスを使用してインデックスにカタログが作成されます。SQL Server でサポートされているカタログ作成の種類には、すべてのカタログの作成、変更の追跡に基づく自動または手動でのカタログ作成、およびタイムスタンプに基づく増分カタログ作成があります。

すべてのカタログの作成

すべてのカタログの作成では、テーブルまたはインデックス付きビューのすべての行に対してインデックス エントリが作成されます。フルテキスト インデックスのすべてのカタログの作成では、ベース テーブルまたはインデックス付きビューのすべての行に対してインデックス エントリが作成されます。

既定では、新しいフルテキスト インデックスが作成されると、すぐにそのカタログが作成されます。ただし、すべてのカタログの作成では大量のリソースが消費される可能性があります。このため、ピーク期間にフルテキスト インデックスを作成する場合は、すべてのカタログの作成をオフピーク時間まで遅らせることが推奨されています (特にフルテキスト インデックスのベース テーブルが大きい場合)。ただし、インデックスが属するフルテキスト カタログは、そのすべてのフルテキスト インデックスのカタログが作成されるまで使用できません。フルテキスト インデックスを作成する際に直ちにカタログを作成しない場合は、Transact-SQL ステートメント CREATE FULLTEXT INDEX で CHANGE_TRACKING OFF および NO POPULATION 句を指定します。SQL Server で新しいフルテキスト インデックスにカタログを作成するには、START FULL POPULATION または START INCREMENTAL POPULATION 句を指定して Transact-SQL ステートメント ALTER FULLTEXT INDEX を実行します。詳細については、このトピックの後半の例「A. すべてのカタログの作成を実行せずにフルテキスト インデックスを作成する」および「B. テーブルですべてのカタログの作成を実行する」を参照してください。

変更の追跡に基づくカタログ作成

必要に応じて、変更の追跡を使用して、すべてのカタログの作成が最初に実行された後のフルテキスト インデックスを保持することができます。変更の追跡には若干のオーバーヘッドが伴います。これは、前回のカタログ作成以降にベース テーブルに対して行われた変更を追跡するテーブルが SQL Server で保持されるためです。変更の追跡を使用すると、ベース テーブルまたはインデックス付きビューで更新、削除、または挿入によって変更された行の記録が SQL Server で保持されます。WRITETEXT および UPDATETEXT によるデータの変更は、フルテキスト インデックスには反映されず、変更の追跡でも取得されません。

注意

timestamp 列を含んでいるテーブルには、増分作成を使用できます。

インデックス作成時に変更の追跡を有効にすると、SQL Server で新しいフルテキスト インデックスが作成された直後にそのインデックスですべてのカタログの作成が実行されます。それ以降は、変更が追跡されてフルテキスト インデックスに反映されます。変更の追跡には、自動 (CHANGE_TRACKING AUTO オプション) と手動 (CHANGE_TRACKING MANUAL オプション) の 2 種類があります。既定では自動で変更が追跡されます。

変更の追跡の種類によって、フルテキスト インデックスのカタログ作成方法が次のように決まります。

  • 自動でのカタログ作成

    既定では、または CHANGE_TRACKING AUTO を指定すると、Full-Text Engine によってフルテキスト インデックスに自動的にカタログが作成されます。すべてのカタログの作成が最初に実行された後に、ベース テーブルでデータが変更されると変更が追跡され、追跡された変更が自動的に反映されます。ただし、フルテキスト インデックスはバックグラウンドで更新されるため、変更が直ちにインデックスに反映されないこともあります。

    自動でのカタログ作成を指定して変更の追跡を設定するには

    詳細については、このトピックの後半の例「E. 自動で変更が追跡されるようにフルテキスト インデックスを変更する」を参照してください。

  • 手動でのカタログ作成

    CHANGE_TRACKING MANUAL を指定すると、フルテキスト インデックスに手動でのカタログ作成が適用されます。すべてのカタログの作成が最初に実行された後に、ベース テーブルでデータが変更されると変更が追跡されます。ただしその変更は、ALTER FULLTEXT INDEX ... START UPDATE POPULATION ステートメントを実行するまで反映されません。SQL Server エージェントを使用すると、この Transact-SQL ステートメントを定期的に呼び出すことができます。

    手動でのカタログ作成を指定して変更の追跡を開始するには

    詳細については、このトピックの後半の例「C. 手動で変更を追跡するようにフルテキスト インデックスを作成する」および「D. 手動でのカタログ作成を実行する」を参照してください。

変更の追跡を無効にするには

タイムスタンプに基づく増分作成

増分作成は、フルテキスト インデックスに手動でカタログを作成するためのもう 1 つのメカニズムです。増分作成は、CHANGE_TRACKING が MANUAL または OFF に設定されているフルテキスト インデックスに対して実行できます。フルテキスト インデックスの最初のカタログ作成が増分作成の場合、すべての行にインデックスが付けられるため、完全作成と同じになります。

増分作成では、インデックスが設定されたテーブルに timestamp データ型の列が存在する必要があります。timestamp 型の列が存在しない場合には、増分作成を実行できません。timestamp 型の列を含んでいないテーブルで増分作成を要求すると、すべてのカタログの作成が実行されます。また、前回のカタログ作成後にテーブルのフルテキスト インデックスに影響するようなメタデータの変更があった場合、増分作成の要求はすべてのカタログの作成として実行されます。これには、列、インデックス、またはフルテキスト インデックスの定義を変更したことによるメタデータの変更が含まれます。

SQL Server では、timestamp 列を使用して前回のカタログ作成後に変更された行が識別されます。増分作成では、前回のカタログ作成後、または作成中に追加、削除、または変更された行のフルテキスト インデックスが更新されます。テーブルで大量の挿入が行われた場合は、手動でのカタログ作成よりも増分作成を使用した方が効率的です。

作成が終わると、Full-Text Engine は新しい timestamp 型の値を記録します。この値は、SQL Gatherer が検出した timestamp 型の最大値です。今後、増分作成を開始するときには、この値が使用されます。

増分作成を実行するには、START INCREMENTAL POPULATION 句を指定して ALTER FULLTEXT INDEX ステートメントを実行します。

増分作成ジョブのスケジュールを設定するには

注意

このセクションの例では、AdventureWorks2008R2 サンプル データベースの Production.Document テーブルまたは HumanResources.JobCandidate テーブルを使用します。

A. すべてのカタログの作成を実行せずにフルテキスト インデックスを作成する

次の例では、AdventureWorks2008R2 サンプル データベースの Production.Document テーブルにフルテキスト インデックスを作成します。この例では、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

B. テーブルですべてのカタログの作成を実行する

次の例では、AdventureWorks2008R2 サンプル データベースの Production.Document テーブルですべてのカタログの作成を実行します。

ALTER FULLTEXT INDEX ON Production.Document
   START FULL POPULATION;

C. 手動で変更を追跡するようにフルテキスト インデックスを作成する

次の例では、AdventureWorks2008R2 サンプル データベースの HumanResources.JobCandidate テーブルで、手動でのカタログ作成を指定した変更の追跡を使用するフルテキスト インデックスを作成します。

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. 手動でのカタログ作成を実行する

次の例では、AdventureWorks2008R2 サンプル データベースの HumanResources.JobCandidate テーブルで、変更が追跡されるフルテキスト インデックスに対して手動でのカタログ作成を実行します。

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

E. 自動で変更が追跡されるようにフルテキスト インデックスを変更する

次の例では、AdventureWorks2008R2 サンプル データベースの HumanResources.JobCandidate テーブルで、自動でのカタログ作成を指定した変更の追跡を使用するようにフルテキスト インデックスを変更します。

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