在AQL中,首先是连接还是过滤器?

时间:2017-06-25 20:44:17

标签: arangodb aql nosql

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

OR

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

1 个答案:

答案 0 :(得分: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})

您可以使用按钮query检查explain标签中的WebUI优化查询的方式。它将打印执行计划,您还可以在其中查看使用的索引以及查询的每个部分的成本。这是一个非常强大的工具。

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