Oracle Textに用意されているSEPARATE_OFFSETS
オプションを使用すると、主に1つのワードまたはブールの問合せを対象としてIO操作を多用するCONTEXT索引の問合せパフォーマンスを改善することができます。
SEPARATE_OFFSETS
オプションでは、TEXTタイプのトークンに対して作成されるポスト・リストの構造が異なります。DOCID、頻度、情報の長さ(オフセット情報の長さ)およびオフセットをポスト・リストに分散させるかわりに、SEPARATE_OFFSETS
オプションではDOCIDと頻度をポスト・リストの最初にまとめて格納し、情報の長さとオフセットをポスト・リストの最後に格納します。ポストの先頭にあるヘッダーには、DOCIDとオフセットの間の境界点に関する情報が含まれています。このようにDOCIDとオフセットを分離すると、データを読み取る問合せの時間が短くなるため、問合せの応答時間が短縮されます。
SEPARATE_OFFSETS
オプションのパフォーマンスが最大限に発揮されるのは、BIG_IOオプションと組み合せたときに、きわめて長いポストを持つトークンを対象とした場合です。
SEPARATE_OFFSETS
オプションを指定してCONTEXT索引を作成するには、まずSEPARATE_OFFSETS
記憶域属性の値をT
に設定して基本記憶域プリファレンスを作成し、CONTEXT索引の作成時にこの記憶域プリファレンスを指定します。
次の例は、基本記憶域プリファレンスmystore
を作成し、そのSEPARATE_OFFSETS
記憶域属性の値をT
に設定します。
exec ctx_ddl.create_preference('mystore', 'BASIC_STORAGE'); exec ctx_ddl.set_attribute('mystore', 'SEPARATE_OFFSETS', 'T');
SEPARATE_OFFSETSオプションを無効にするには、SEPARATE_OFFSETS
記憶域属性の値をF
に設定して既存の記憶域プリファレンス(mystore
)を更新してから、索引を再構築します。
exec ctx_ddl.set_attribute('mystore', 'SEPARATE_OFFSETS', 'F'); alter index idx rebuild('replace storage mystore');
索引を再構築せずにパーティション索引でSEPARATE_OFFSETSオプションを有効にするには、SEPARATE_OFFSETS
記憶域属性の値をT
に設定して基本記憶域プリファレンスを変更し、ctx_ddl.replace_index_metadata
を使用してグローバル索引メタデータを置き換えてから、パーティション索引表のパーティションごとにREBUILDモードでoptimize_index
をコールします。
次の例は、パーティション索引idx
に対してSEPARATE_OFFSETSを有効にします。
exec ctx_ddl.set_attribute('mystore', 'SEPARATE_OFFSETS', 'T'); exec ctx_ddl.replace_index_metadata('idx', 'replace storage mystore'); exec ctx_ddl.optimize_index('idx', 'rebuild', part_name=>'part1');