The following list identifies several important concepts to
consider to create an efficient query.
Ensure that the query filter contains at least one indexed
attribute. For more information, see Indexed Attributes.
Search for objectCategory instead of objectClass,
because objectClass is not an indexed property. The
statement objectClass=xyz refers to directory objects
in which xyz represents any class in the object class
hierarchy, whereas objectCategory=xyz, refers to those
directory objects in which xyz identifies a specific
class in the object class hierarchy. The objectClass
property can take multiple values, whereas objectCategory
takes a single value and is, thus, better suited for type matching
of objects in a directory search.
Avoid searching for text in the middle and on the end of a
string. For example, cn=*hille* or
cn=*larouse. Using more specific matching criteria
tends to increase search performance. This is because Active
Directory® evaluates all predicates, identifies the indices, and
then chooses one index most likely to yield the smallest set of
returned values.
Use the global catalog if you are considering subtree searches.
Chasing referrals requires extensive resources. For more
information, see Specifying Other Search
Options.
Assume that a subtree search will return a large result set.
Use paging when performing subtree searches. The server will stream
a large result set in chunks reducing the server side memory
resources. This minimizes network usage and reduces the need for
sending large chunks of data over a network. For more information,
see Specifying Other Search Options.
Use multiple attributes in for a search. One search of an
object that reads two attributes is more efficient than two
searches of the same object, each returning one attribute.
Bind to an object one time and hold the binding handle for the
rest of the session. Do not bind and unbind for each call. If you
use ADO or OLE DB, do not create many connection objects.
Read the rootDSE one time and remember its contents for the
rest of your session. For more information, see Serverless Binding and
RootDSE.
Persist references to objects as GUIDs, not distinguished
names, in order to be rename and delete safe. For more information,
see Using
objectGUID to Bind to an Object.