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
値を評価する必要があります。