元组索引的工作原理

元组索引用于优化具有 0 个或多个 中间搜索字符串和 0 或 1 个最终搜索字符串的搜索。 如果在该属性上没有可用的普通索引,它们还可以用于优化对初始搜索字符串的搜索。

可以通过在 searchFlags 属性中设置对应于值 32 的位 5 来为属性启用元组索引。 此属性是在表示需要元组索引的属性的架构对象中设置的。 启用元组索引对性能的影响是,为该属性设置的任何字符串值都将扩展到元组索引中的大量片段。 当属性展开时,它会在目录信息树文件中占用更大的磁盘空间,而且更新速度也会更慢。

元组索引的设计是为了加速对 *string* 形式的搜索。 加速可能相当大,因为这种形式的搜索无法以任何其他方式进行优化,而且在未优化的形式下,它会迫使 Active Directory 服务器在搜索范围内遍查每个对象以执行查询。 因此,基本搜索将只搜索一个对象,这将使用更少的资源,直接子搜索将只查找对象的子对象(根据容器大小,它可能使用更少的或更多的资源),子树搜索将遍查基本对象下的整个子树,这通常需要大量资源,并且由于子树大小而非常慢。

元组索引的工作原理是将字符串分解为元组。 例如,字符串“Active Directory”将被分解为以下元组:

  • "Active Dir"
  • "ctive Dire"
  • "tive Direc"
  • "ive Direct"
  • "ve Directo"
  • "e Director"
  • " Directory"
  • "Directory"
  • "irectory"
  • "rectory"
  • "ectory"
  • "ctory"
  • "tory"
  • "ory"

注意

当展开字符串进行元组索引时,目录将停止在 32767 个字符处。

 

元组索引将为这些元组中的每一个包含一个条目。 因此,如果用户搜索 *cto*,那么 Active Directory 服务器将在索引中查找“cto”的所有匹配项,在本例中,找到一个指向具有值为“Directory”的(元组索引)属性的记录的指针。

如果中间搜索字符串(上一个示例中的 *cto*)足够具体,那么搜索将非常高效,因为它大大减少了 Active Directory 服务器执行查询时必须检查的对象数量。