テキストインデックスを作成する場合、「再表示タイプ」も選択する必要があります。テキストインデックスでは、即時、自動、手動の 3 つの再表示タイプがサポートされています。再表示タイプは、テキストインデックスの作成時に定義します。即時テキストインデックスの場合を除き、再表示タイプはテキストインデックスの作成後に変更できます。
IMMEDIATE REFRESH IMMEDIATE REFRESH テキストインデックスは、基本となるテーブルのデータに変更があると再表示されます。データを常に最新の状態に保つ必要がある場合、インデックス付けされたカラムが比較的短い場合、データ変更の頻度が低い場合においてのみ使用することをおすすめします。
テキストインデックスのデフォルトの再表示タイプは IMMEDIATE REFRESH です。
AUTO REFRESH または MANUAL REFRESH のテキストインデックスを、IMMEDIATE REFRESH テキストインデックスに変更することはできません。変更したい場合は、該当するテキストインデックスを削除して、IMMEDIATE REFRESH テキストインデックスとして再作成する必要があります。
IMMEDIATE REFRESH テキストインデックスはすべての独立性レベルをサポートします。IMMEDIATE REFRESH テキストインデックスは、作成時にデータが設定され、この初期再表示中に、テーブルに排他ロックがかけられます。
AUTO REFRESH AUTO REFRESH テキストインデックスは、指定された間隔で自動的に再表示されます。データがある程度古くなってもかまわない場合に使用することをおすすめします。古いインデックスを問い合わせると、一致するローのうち、最後に再表示されてから変更されていないものが返されます。したがって、最後の再表示以降に挿入、削除、更新されたローはクエリで返されません。
AUTO REFRESH テキストインデックスは、次のいずれかの条件が当てはまる場合、指定した間隔よりも頻繁に再表示されることがあります。
最後の再表示からの時間が再表示間隔より長い場合。
保留中のすべてのローの合計長 (sa_text_index_stats システムプロシージャーによって返される pending_length) が合計インデックスサイズ (sa_text_index_stats によって返される doc_length) の 20% を超える場合。
削除された長さが合計インデックスサイズ (doc_length) の 50 % を超える場合。この場合には、増分更新ではなく常に再構築が実行されます。
AUTO REFRESH テキストインデックスは、独立性レベル 0 を使用して再表示されます。
AUTO REFRESH テキストインデックスには、作成時にはデータが含まれていないため、最初の再表示が行われるまで利用できません。最初の再表示は通常、テキストインデックスが作成されてから 1 分以内に行われます。REFRESH TEXT INDEX 文を使用して、AUTO REFRESH テキストインデックスを手動で再表示することもできます。
AUTO REFRESH テキストインデックスは、dbunload で -g オプションを指定しない限り、再ロード時に再表示されません。
MANUAL REFRESH MANUAL REFRESH テキストインデックスは、ユーザーの実行によってのみ再表示されます。基本となるテーブルのデータがめったに変更されない場合、データの古さの程度が大きくても許容できる場合、またはイベントや条件を満たした後に再表示したい場合に使用することをおすすめします。古いインデックスを問い合わせると、一致するローのうち、最後に再表示されてから変更されていないものが返されます。したがって、最後の再表示以降に挿入、削除、更新されたローはクエリで返されません。
MANUAL REFRESH テキストインデックスには、独自の再表示方針を定義できます。次の例では、引数として渡される再表示間隔と、AUTO REFRESH テキストインデックスに使用するルールと同様のルールを使用して、すべての MANUAL REFRESH テキストインデックスが再表示されます。
CREATE PROCEDURE refresh_manual_text_indexes( refresh_interval UNSIGNED INT ) BEGIN FOR lp1 AS c1 CURSOR FOR SELECT ts.* FROM SYS.SYSTEXTIDX ti JOIN sa_text_index_stats( ) ts ON ( ts.index_id = ti.index_id ) WHERE ti.refresh_type = 1 -- manual refresh indexes only DO BEGIN IF last_refresh IS null OR cast(pending_length as float) / ( IF doc_length=0 THEN NULL ELSE doc_length ENDIF) > 0.2 OR DATEDIFF( MINUTE, CURRENT TIMESTAMP, last_refresh ) > refresh_interval THEN EXECUTE IMMEDIATE 'REFRESH TEXT INDEX ' || text-index-name || ' ON "' || table-owner || '"."' || table-name || '"'; END IF; END; END FOR; END; |
いつでも、sa_text_index_stats システムプロシージャーを使用して、再表示が必要かどうか、再表示を完全再構築にするか、増分更新にするかを決定できます。
MANUAL REFRESH テキストインデックスには、作成時にはデータが含まれていないため、再表示するまで利用できません。MANUAL REFRESH テキストインデックスを再表示するには、REFRESH TEXT INDEX 文を使用します。
MANUAL REFRESH テキストインデックスは、dbunload で -g オプションを指定しない限り、再ロード時に再表示されません。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |