图形查询 - out vs select expand

时间:2017-03-29 12:51:48

标签: orientdb

这些解决方案中的一个客观上是否更好,还是全部取决于数据?解释选项向我显示,确实,优化器以不同方式执行查询。这只是一个例子,我在我的应用程序中会有很多这样的查询,我想知道执行这种过滤的最佳方法。

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

1 个答案:

答案 0 :(得分:1)

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

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

上有索引,那就更好了

如果您的用户很少login>,则第二个查询会更有效率“admin”(再次,可能有索引)以及每个用户的传出边数是否低。