1.2. インデックスのメリットとのバランス
新しいインデックスを作成する前に、インデックスを維持することのメリットとコストのバランスを考えてみます。
- 近似インデックスは、通常、数字を含む属性 (電話番号など) には効率的ではありません。
- 部分文字列のインデックスはバイナリー属性では機能しません。
- イメージなど、大きな値を含む属性の等価インデックスは回避してください。
- 検索で一般的に使用されない属性のインデックスを維持すると、検索パフォーマンスを向上させることなくオーバーヘッドが増加します。
- インデックス化されていない属性は、検索要求で依然として使用できますが、検索のタイプによっては検索パフォーマンスが大幅に低下する可能性があります。
インデックスは、非常に時間がかかります。たとえば、Directory Server が追加操作を受け取った場合、Directory Server はインデックス属性を調べて、属性値に対してインデックスが維持されているかどうかを判断します。作成された属性値がインデックス化されている場合、Directory Server は新しい属性値をインデックスに追加し、その後、実際の属性値がエントリーに作成されます。
例1.1 ユーザーがエントリーを追加する際に Directory Server が行うインデックス作成手順
Directory Server が以下のインデックスを維持していると仮定します。
-
cnおよびsn属性の等値性、近似性、および部分文字列インデックス。 -
telephoneNumber属性の等価および部分文字列のインデックス。 -
description属性の部分文字列インデックス。
たとえば、ユーザーが次のようなエントリーを追加したとします。
dn: cn=John Doe,ou=People,dc=example,dc=com
objectclass: top
objectClass: person
objectClass: orgperson
objectClass: inetorgperson
cn: John Doe
cn: John
sn: Doe
ou: Manufacturing
ou: people
telephoneNumber: 408 555 8834
description: Manufacturing lead
ユーザーがエントリーを追加すると、Directory Server は以下のステップを実行します。
-
JohnおよびJohn Doeのcn等価インデックスエントリーを作成します。 -
JohnおよびJohn Doeの適切なcnの近似インデックスエントリーを作成します。 -
JohnおよびJohn Doeのcn部分文字列インデックスエントリーを作成します。 -
Doeのsn等価インデックスエントリーを作成します。 -
Doeに対するsn近似インデックスエントリーを作成します。 -
Doeのsn部分文字列インデックスエントリーを作成します。 -
408 555 8834のtelephoneNumber等価インデックスエントリーを作成します。 -
408 555 8834のtelephoneNumber部分文字列インデックスエントリーを作成します。 -
Manufacturing leadのdescription部分文字列インデックスエントリーを作成します。
この例は、大規模なディレクトリーのデータベースを作成および保守するために必要なアクションの数が、非常に多くのリソースを消費する可能性があることを示しています。
Directory Server のパフォーマンスに影響を与える可能性があるため、メンバーシップ属性 (member、uniquemember など) の部分文字列インデックスを定義しないでください。メンバーを追加または削除する場合 (たとえば、多数のメンバーを持つグループに uniquemember を追加する場合)、uniquemember の部分文字列インデックスの計算では、追加または削除された値だけでなく、すべての uniquemember 値を評価する必要があります。