【问题标题】:In AQL, do joins happen first or the filters?在 AQL 中,是先发生联接还是先发生过滤器?
【发布时间】:2017-06-25 20:44:16
【问题描述】:

我有 2 个集合,用户和员工,因此员工文档的 _id 嵌入到用户文档中。我想知道以下两种方法中哪一种更有效。

FOR employee IN employees
    FOR user IN users
            FILTER user.email == 'user@foo.com'
    FILTER employee._id == user.employee
RETURN merge({user: user, active: employee.active})

FOR user IN users
    FOR employee IN employees
            FILTER employee._id == user.employee
    FILTER user.email == 'user@foo.com'
RETURN merge({user: user, active: employee.active})

【问题讨论】:

    标签: arangodb aql nosql


    【解决方案1】:

    在你的情况下没关系。该查询将从数据库执行计划程序中自动优化并重写为类似于以下内容的查询。

    FOR employee IN employees
      FILTER user.email == 'user@foo.com'
      FOR user IN users
        FILTER employee._id == user.employee
        RETURN merge({user: user, active: employee.active})
    

    您可以使用按钮explainquery 选项卡中检查查询是如何通过 webUI 优化的。它将打印执行计划,您还可以在其中查看使用了哪些索引以及查询的每个部分的成本。这是一个非常强大的工具。

    如果您想了解更多关于查询执行和性能的信息,您应该查看docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      相关资源
      最近更新 更多