タプルインデックスの仕組み
タプルインデックスは、0個以上の中間検索文字列と0個または1個の最終検索文字列を持つ検索を効率化するために使用されます。 また、ある属性に通常のインデックスが存在しない場合でも、初期検索文字列の検索を最適化するために利用できます。
タプルインデックスを有効にするには、searchFlags属性の5番目のビット(値32)を設定します。 この属性は、タプルインデックスを必要とする属性を表すスキーマオブジェクトに設定されます。 タプルインデックスを有効にすると、その属性に設定された任意の文字列値はタプルインデックス内で複数のフラグメントに展開されるため、パフォーマンスに影響が出ます。 属性が展開されると、ディレクトリ情報ツリーファイルでより多くのディスクスペースを使用し、また更新も遅くなるという影響があります。
タプルインデックスは、特定の形式の検索を高速化するために設計されています *string*
。 この形式の検索は他の方法では最適化できないため、効果的な高速化が期待できます。非最適化の場合、この形式の検索ではActive Directoryサーバーが検索範囲内のすべてのオブジェクトを順に処理する必要があります。 そのため、ベース検索では1つのオブジェクトのみが検索され、リソースの使用量が少なくなります。直下の子の検索では、オブジェクトの子要素のみが検索されます(コンテナのサイズによってリソースの使用量は異なります)。サブツリーの検索では、ベースオブジェクトの下のサブツリー全体を処理する必要があります。そのため、通常は多くのリソースを必要とし、サブツリーのサイズによって処理が非常に遅くなることがあります。
タプルインデックスは、文字列をタプルに分割して処理します。 例えば、「Active Directory」という文字列は、次のようなタプルに分割されます:
"Active Dir"
"ctive Dire"
"tive Direc"
"ive Direct"
"ve Directo"
"e Director"
" Directory"
"Directory"
"irectory"
"rectory"
"ectory"
"ctory"
"tory"
"ory"
Note
タプルインデックスでは、文字列を展開する際にディレクトリは最大で32767文字までと制限されます。
タプルインデックスには、それぞれのタプルに対するエントリが含まれます。 そのため、ユーザーが*cto*
「cto」と検索した場合、Active Directoryサーバーはインデックス内で「cto」と一致する全ての結果を検索し、この場合は「Directory」という値を持つ(タプルインデックス化された)属性を持つレコードへのポインタを見つけます。
もし前の例での中間検索文字列(*cto*
)が具体的な条件を満たしている場合、検索は非常に効率的に行われます。なぜなら、具体的な条件によって、Active Directoryサーバーがクエリを実行するために調査しなければならないオブジェクトの数が大幅に減少するからです。