効率的なクエリの作成

効率的なクエリを作成するときに考慮する重要な概念を次の表に示します。

領域 説明
インデックス作成 クエリ フィルターに少なくとも 1 つのインデックス付き属性が含まれていることを確認します。
詳細については、「インデックス付き属性」を参照してください。
クラスとカテゴリ "objectClass=xyz" ステートメントは、"xyz" がオブジェクト クラス階層内の任意のクラスを表すディレクトリ オブジェクトを参照します。一方、"objectCategory=xyz" は、"xyz" がオブジェクト クラス階層内の特定のクラスを識別するディレクトリ オブジェクトを指します。 objectClass プロパティは複数の値を格納する可能性がありますが、objectCategory は 1 つの値を格納するため、ディレクトリ検索でのオブジェクトの型照合により適しています。
テキスト検索 文字列の中間と末尾のテキストの検索は避けてください。
たとえば、"cn=*hille*" や "cn=*larouse" です。
より特定した一致条件を使用すると、検索のパフォーマンスが向上する傾向があります。 これは、Active Directory Domain Services がすべての述語を評価し、インデックスを識別してから、返される値の最小セットを生成する可能性が最も高い 1 つのインデックスを選択するためです。 この手法は、中間と末尾文字列検索では効果的に機能しません。 これらの検索を使用する以外のオプションがない場合は、属性のタプル インデックスを定義できます。
タプル インデックスの詳細については、「タプル インデックス作成のしくみ」を参照してください。
サブツリーの検索 サブツリー検索を検討している場合は、グローバル カタログを使用してください。 参照を追跡するには、膨大なリソースが必要です。
詳細については、「その他の検索オプションの指定」を参照してください。
ページングの使用 サブツリー検索で大きな結果セットが返されることを想定してください。 サブツリー検索を実行するときは、ページングを使用してください。 サーバーは大きな結果セットをチャンクでストリーミングすることで、サーバー側のメモリ リソースを削減します。 これにより、ネットワーク使用量が最小限になり、ネットワーク経由で大量のデータのチャンクを送信する必要性が削減されます。
詳細については、「その他の検索オプションの指定」を参照してください。
検索の結合 1 つの検索に複数の属性を使用します。 2 つの属性を読み取るオブジェクトの 1 つの検索は、それぞれが 1 つの属性を返す同じオブジェクトの 2 つの検索よりも効率的です。
バインドの効率的な使用 オブジェクトに 1 回バインドし、セッションの残りの期間、そのバインド ハンドルを保持します。 呼び出しごとにバインドとバインド解除を行わないでください。 ADO または OLE DB を使用する場合は、多くの接続オブジェクトを作成しないでください。
RootDSE キャッシュ rootDSE を 1 回読み、セッションの残りの期間、その内容をメモリに保持します。
詳細については、「サーバーレス バインディングと RootDSE」を参照してください。
参照の永続化 名前の変更や削除を安全に行うために、オブジェクトへの参照を識別名ではなく GUID として永続化します。
詳細については、「objectGUID を使用してオブジェクトにバインドする」を参照してください。