適用対象:SQL Server
Azure SQL データベース
Azure SQL Managed Instance
フルテキスト インデックスの作成と保持では、 作成 (または クロール) と呼ばれるプロセスを使用してインデックスが作成されます。
入力のタイプ
フルテキスト インデックスは次の種類の作成に対応しています。
- すべてのカタログの作成
- 変更の追跡に基づく自動または手動作成
- タイムスタンプに基づく増分作成
すべてのカタログの作成
すべてのカタログの作成では、テーブルまたはインデックス付きビューのすべての行に対してインデックス エントリが作成されます。 フルテキスト インデックスのすべてのカタログの作成では、ベース テーブルまたはインデックス付きビューのすべての行に対してインデックス エントリが作成されます。
既定では、新しいフルテキスト インデックスが作成されると、SQL Server によってすぐにそのカタログが作成されます。
- 一方で、母集団全体を対象にすると、かなりのリソースを消費する可能性があります。 このため、ピーク時にフルテキスト インデックスを作成する場合、特にそのフルテキスト インデックスのベース テーブルが大きいときは、完全作成をオフピーク時まで遅らせるのがベスト プラクティスであることがよくあります。
- 一方で、インデックスが属するフルテキスト カタログは、そのすべてのフルテキスト インデックスのカタログが作成されるまで使用できません。
すぐに値を入力せずにフルテキスト インデックスを作成するには、CHANGE_TRACKING OFF, NO POPULATION ステートメントに CREATE FULLTEXT INDEX 句を指定します。
CHANGE_TRACKING MANUAL を指定する場合、Full-Text Engine は、ALTER FULLTEXT INDEX または START FULL POPULATION により START INCREMENTAL POPULATION ステートメントが実行されるまで、新しいフルテキスト インデックスに値を入力しません。
例 - 完全作成を実行せずにフルテキスト インデックスを作成する
次の例では、 Production.Document サンプル データベースの AdventureWorks テーブルにフルテキスト インデックスを作成します。 この例では 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 サンプル データベースの AdventureWorks テーブルで完全作成を実行します。
ALTER FULLTEXT INDEX ON Production.Document
START FULL POPULATION;
変更の追跡に基づく作成
必要に応じて、変更の追跡を使用して、完全作成が最初に実行された後のフルテキスト インデックスを保持することができます。 変更の追跡には若干のオーバーヘッドが伴います。これは、前回のカタログ作成以降にベース テーブルに対して行われた変更を追跡するテーブルが SQL Server で保持されるためです。 変更の追跡を使用すると、ベース テーブルまたはインデックス付きビューで更新、削除、または挿入によって変更された行の記録が SQL Server で保持されます。 WRITETEXT や UPDATETEXT によるデータの変更は、フルテキスト インデックスには反映されず、変更の監視でも取得されません。
注
timestamp 列を含むテーブルでは、変更追跡の代わりに増分読み込みを使用できます。
インデックス作成時に変更の追跡を有効にすると、SQL Server で新しいフルテキスト インデックスが作成された直後にそのインデックスですべてのカタログの作成が実行されます。 それ以降は、変更が追跡されてフルテキスト インデックスに反映されます。
変更の追跡を有効化
変更の追跡には、次の 2 種類があります。
- 自動 (
CHANGE_TRACKING AUTOオプション)。 既定では自動で変更が追跡されます。 - 手動 (
CHANGE_TRACKING MANUALオプション)。
変更の追跡の種類によって、フルテキスト インデックスのカタログ作成方法が次のように決まります。
自動での入力
既定では、あるいは
CHANGE_TRACKING AUTOを指定した場合、Full-Text Engine によってフルテキスト インデックスに自動的にカタログが作成されます。 初回の完全取り込みが完了すると、ベース テーブルでデータが変更されるたびにその変更が追跡され、自動的に反映されます。 ただし、フルテキスト インデックスはバックグラウンドで更新されるため、変更が直ちにインデックスに反映されないこともあります。自動入力機能を使用して変更の追跡を開始する方法
CREATE FULLTEXT INDEX ...WITH CHANGE_TRACKING AUTO
ALTER FULLTEXT INDEX ... SET auto のCHANGE_TRACKING
例 - 自動で変更が追跡されるようにフルテキスト インデックスを変更する
次の例では、HumanResources.JobCandidateサンプル データベースのAdventureWorksテーブルのフルテキスト インデックスを、自動反映を伴う変更追跡を使用するように変更します。USE AdventureWorks; GO ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO; GO手動での入力
CHANGE_TRACKING MANUAL を指定すると、Full-Text Engine ではフルテキスト インデックスに対して手動作成が使用されます。 初回の完全な取り込みが完了すると、以後はベーステーブル内のデータが変更されるたびに、その変更が追跡されます。 ただし、ALTER FULLTEXT INDEX ... START UPDATE POPULATION ステートメントを実行するまで、これらはフルテキスト インデックスに反映されません。 SQL Server エージェントを使用すると、この Transact-SQL ステートメントを定期的に呼び出すことができます。
手動でのデータ入力による変更の追跡を開始する方法
CREATE FULLTEXT INDEX ...CHANGE_TRACKINGマニュアル付き
ALTER FULLTEXT INDEX ... SET 変更追跡マニュアル
例 - 手動で変更を追跡するようにフルテキスト インデックスを作成する
次の例では、HumanResources.JobCandidateサンプル データベースのAdventureWorksテーブルに対して、手動更新による変更追跡を使用するフルテキスト インデックスを作成します。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; GO例 - 手動入力を実行する
次の例では、HumanResources.JobCandidateサンプル データベースのAdventureWorksテーブルで、変更が追跡されるフルテキスト インデックスに対して手動でのカタログ作成を実行します。USE AdventureWorks; GO ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION; GO
変更追跡を無効にする
CREATE FULLTEXT INDEX ...CHANGE_TRACKING を OFF にして
ALTER FULLTEXT INDEX ... SET 変更追跡 オフ
タイムスタンプに基づく増分作成
増分作成は、フルテキスト インデックスに手動でカタログを作成するためのもう 1 つのメカニズムです。 テーブルに大量の挿入が行われる場合は、手動生成を使用するよりも増分生成を使用する方が効率的です。
増分作成は、CHANGE_TRACKING が MANUAL または OFF に設定されているフルテキスト インデックスに対して実行できます。
増分作成では、インデックスが設定されたテーブルに timestamp データ型の列が存在する必要があります。 timestamp 列が存在しない場合、増分取り込みは実行できません。
SQL Server は、前回の設定以降に変更された行を識別するために、timestamp 列を使用します。 増分作成では、前回のカタログ作成後、または作成中に追加、削除、または変更された行のフルテキスト インデックスが更新されます。 ポピュレーションの終了時に、Full-Text Engine は新しい timestamp 値を記録します。 この値は、SQL Gatherer が検出した timestamp 型の最大値です。 次回、増分作成を開始するとき、この値が使用されます。
増分作成が要求された結果、完全作成が行われることもあります。
- timestamp 型の列を含んでいないテーブルで増分作成を要求すると、完全作成が実行されます。
- フルテキスト インデックスの最初のカタログ作成が増分作成の場合、すべての行にインデックスが付けられるため、完全作成と同じになります。
- 前回のカタログ作成後にテーブルのフルテキスト インデックスに影響するようなメタデータの変更があった場合、増分作成の要求はすべてのカタログの作成として実行されます。 これには、列、インデックス、またはフルテキスト インデックスの定義を変更したことによるメタデータの変更が含まれます。
増分作成を実行する
増分作成を実行するには、ALTER FULLTEXT INDEX 句を利用して START INCREMENTAL POPULATION ステートメントを実行します。
増分作成のスケジュールを作成または変更する
Management Studio で、オブジェクト エクスプローラーでサーバーを展開します。
[データベース]を展開し、フルテキスト インデックスを含むデータベースを展開します。
[テーブル]を展開します。
フルテキスト インデックスが定義されているテーブルを右クリックし、 [フルテキスト インデックス]コンテキスト メニューの [フルテキスト インデックス] をクリックして、 [プロパティ]をクリックします。 [フルテキスト インデックスのプロパティ] ダイアログ ボックスが表示されます。
重要
ベース テーブルまたはビューに timestamp データ型の列が含まれていない場合は、増分作成はできません。
[ページの選択] ペインで [スケジュール] をクリックします。
このページでは、フルテキスト インデックスのベース テーブルまたはインデックス付きビューの増分作成を開始する SQL Server エージェント ジョブのスケジュールを作成または管理できます。
オプションは次のとおりです。
新しいスケジュールを作成するには、[新規作成] をクリックします。
スケジュールを作成できる [新しいフルテキスト インデックス テーブルのスケジュール] ダイアログ ボックスが表示されます。 スケジュールを保存するには、 [OK] をクリックします。
重要
[フルテキスト インデックスのプロパティ]ダイアログ ボックスを閉じると、新しいスケジュールが SQL Server エージェント ジョブ (database_name. table_name でテーブルの増分作成を開始) に関連付けられます。 同じフルテキスト インデックスのスケジュールを複数作成した場合、すべてのスケジュールで同じジョブが使用されます。
既存のスケジュールを変更するには、それを選択し、[編集] をクリックします。
スケジュールを変更できる [新しいフルテキスト インデックス テーブルのスケジュール] ダイアログ ボックスが表示されます。
注
SQL Server エージェント ジョブの変更については、「ジョブの変更」を参照してください。
既存のスケジュールを削除するには、それを選択し、[削除] をクリックします。
[OK] を選択します。
フルテキスト作成 (クロール) で発生したエラーのトラブルシューティング
クロール時にエラーが発生すると、フルテキスト検索クロール ログ記録機能によってクロール ログが作成および保持されます。このログはプレーンテキスト ファイルです。 各クロール ログは特定のフルテキスト カタログに対応します。 既定では、所与のインスタンス (この例では、既定のインスタンス) のクロール ログは %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG フォルダーにあります。
クロール ログは次のような規則に従って命名されます。
SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]
クロール ログ ファイルの可変部分は次のようになります。
- < DatabaseID> - データベースの ID。 < dbid> は、ゼロで始まる 5 桁の数字です。
- < FullTextCatalogID> - フルテキスト カタログ ID。 < catid> は、ゼロで始まる 5 桁の数字です。
- < n> - 同じフルテキスト カタログに 1 つ以上のクロール ログが存在することを示す整数です。
たとえば、SQLFT0000500008.2 はデータベース ID が 5 で、フルテキスト カタログ ID が 8 のクロール ログ ファイルです。 ファイル名の最後の 2 は、このデータベースとカタログのペアに 2 つのクロール ログ ファイルが存在することを示しています。