这些解决方案中的一个客观上是否更好,还是全部取决于数据?解释选项向我显示,确实,优化器以不同方式执行查询。这只是一个例子,我在我的应用程序中会有很多这样的查询,我想知道执行这种过滤的最佳方法。
SELECT *
FROM
(SELECT expand(in('hasPermission'))
FROM Permission
WHERE type IN ['USER'])
WHERE
login >="admin"
ORDER BY
login ASC
LIMIT 3
SELECT *
FROM User
WHERE login >= "admin"
AND out("hasPermission").type IN ["USER"]
ORDER BY login ASC
LIMIT 3
答案 0 :(得分:1)
这在很大程度上取决于域名。考虑到v 2.2中的查询优化器只是开始扫描(或查询索引)目标类(第一个查询中的权限,第二个查询中的用户),然后继续遍历。
如果您在type
属性中具有“USER”的权限记录很少,并且每个权限的传入边数较少,则第一个查询会更有效。如果您在type
如果您的用户很少login
>,则第二个查询会更有效率“admin”(再次,可能有索引)以及每个用户的传出边数是否低。