Arangodb 在AQL中,连接是先发生还是先过滤?

Arangodb 在AQL中,连接是先发生还是先过滤?,arangodb,aql,nosql,Arangodb,Aql,Nosql,我有两个集合,用户和雇员,这样雇员文档的_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}) 或 对你来说没关系

我有两个集合,用户和雇员,这样雇员文档的_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})


对你来说没关系。查询将从database execution planner中自动优化,并重写为类似于以下内容的查询

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

如果您想了解更多关于查询执行和性能的信息,您应该了解以下内容

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})