OrientDB Traverse SQL查询效率

时间:2015-09-24 08:37:19

标签: sql select graph-databases orientdb

道歉我是Graphing DB的新手!我在OrientDB中有以下基本结构:

enter image description here

我需要获取与给定permission相关联的所有Userpermission始终包含Role,但Role可以直接属于UserTeam。我还没有将其添加到图片中,但User > RoleTeam > Role之间的边缘是has。在User > Team之间member

我目前的做法是:

SELECT permission FROM (
  TRAVERSE any() FROM #23:0 WHILE $depth <=4
) WHERE @class='Role'

然而,我怀疑实现这一目标的效率要高得多。

1 个答案:

答案 0 :(得分:1)

您可以使用命名边,而不是使用any()进行遍历。

EG。如果user -belongsTo-> teamuser,team -hasPermission-> permission,您可以像

一样编写此查询
SELECT FROM (
   TRAVERSE out('belongsTo', 'hasPermission') FROM #23:0 WHILE $depth <=2
) WHERE @class='Role'

这样可以避免遍历不需要的分支。