图查询 - where out vs select expand

Graph query - where out vs select expand

这些解决方案中的一种客观上更好,还是完全取决于数据? Explain 选项告诉我,实际上,优化器以不同的方式执行查询。这只是一个示例,我将在我的应用程序中进行大量此类查询,并且我想知道执行此类过滤的最佳方式。

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

这在很大程度上取决于域。考虑到 v 2.2 中的查询优化器刚刚开始扫描(或查询索引)目标 class(第一个查询中的权限,第二个查询中的用户)然后继续遍历。

如果在 type 属性中具有 "USER" 的权限记录很少,并且每个权限的传入边数较少,则第一个查询会更有效。如果你在 type

上有索引就更好了

如果 login > "admin" 的用户很少(同样,可能有索引),并且每个用户的传出边数较少,则第二个查询效率更高。