更改元素顺序是否会影响-Filter性能?

问题描述 投票:0回答:1

假设我正在使用

Get-ADUser -Filter "ObjectClass -eq 'user' -and 'Name -like '*foo*'"
查询 Active Directory。

颠倒

ObjectClass
Name
的顺序是否会更改传递到 Active Directory 的查询顺序,从而影响性能?根据 this StackOverflow post,PowerShell 在传递到服务器之前将
-Filter
转换为 LDAP 查询。

假设确实如此,该语句按什么顺序求值?从左到右,还是其他?

powershell active-directory ldap-query
1个回答
0
投票

一些高级指示:

  • 公平地假设评估是从左到右的(我没有来源支持这一点),但是将类似PowerShell的

    -Filter
    表达式在幕后转换为LDAP查询是否甚至保留了该顺序不明显,从概念性
    about_Active_Directory_Filter
    帮助主题的
    -Filter
    部分中的 Filter Examples 参数和相应的 LDAP 查询的并置来看:
    -Filter
    中的子表达式顺序并没有一致地保留在那里 - 尽管这可能只是文档中存在不准确之处。

  • 一般来说,鉴于

    -and
    操作是短路,如果将执行速度更快的测试放在LHS上,您将获得更好的性能:

    • 这确保了如果较快的测试结果是否定的,则无需执行相对较慢的测试。

    • 至少假设而言,在当前的情况下,

      ObjectClass -eq 'user'
      可能会更快,因为与
      -like
      的通配符匹配比与
      -eq

      的相等比较更复杂
      • 但是,

        -eq
        -like
        在 LDAP 端都翻译为 same 运算符,
        =
        ;有关详细信息,请参阅链接帮助主题中的
        Supported Operators

      • 无论如何,在这种情况下,在实践中可能没有太大区别。

  • 链接的帮助主题还有一个

    Optimizing Filters
    部分,摘录如下:

    您可以使用这些指南来增强搜索过滤器行为。

    • 避免使用 Recursive 参数,因为它会加剧资源使用 搜索操作。
    • 避免使用按位 AND 运算符和按位 OR 运算符。了解更多 信息,请参阅本主题的支持的运算符部分。
    • 避免使用逻辑 NOT 运算符。
    • 将搜索分解为多个具有更窄条件的查询。
© www.soinside.com 2019 - 2024. All rights reserved.