OrientDB Traverse SQL 查询效率
OrientDB Traverse SQL query efficiency
抱歉,我是 Graphing DB 的新手!我在 OrientDB 中有以下基本结构:
我需要获取与给定 User
关联的所有 permission
。 permission
总是包含在 Role
中,但 Role
可以直接属于 User
或 Team
。我没有将它添加到图像中,但 User > Role
和 Team > Role
之间的边缘是 has
。 User > Team
之间是member
.
我目前的做法是:
SELECT permission FROM (
TRAVERSE any() FROM #23:0 WHILE $depth <=4
) WHERE @class='Role'
但是,我怀疑实现此目标的效率要高得多。
您可以使用命名边来代替 any()
进行遍历。
例如。如果 user -belongsTo-> team
和 user,team -hasPermission-> permission
你可以像
这样写这个查询
SELECT FROM (
TRAVERSE out('belongsTo', 'hasPermission') FROM #23:0 WHILE $depth <=2
) WHERE @class='Role'
这将避免遍历不需要的分支。
抱歉,我是 Graphing DB 的新手!我在 OrientDB 中有以下基本结构:
我需要获取与给定 User
关联的所有 permission
。 permission
总是包含在 Role
中,但 Role
可以直接属于 User
或 Team
。我没有将它添加到图像中,但 User > Role
和 Team > Role
之间的边缘是 has
。 User > Team
之间是member
.
我目前的做法是:
SELECT permission FROM (
TRAVERSE any() FROM #23:0 WHILE $depth <=4
) WHERE @class='Role'
但是,我怀疑实现此目标的效率要高得多。
您可以使用命名边来代替 any()
进行遍历。
例如。如果 user -belongsTo-> team
和 user,team -hasPermission-> permission
你可以像
SELECT FROM (
TRAVERSE out('belongsTo', 'hasPermission') FROM #23:0 WHILE $depth <=2
) WHERE @class='Role'
这将避免遍历不需要的分支。