Orientdb 图形查询-where out vs select展开
这些解决方案中有一个客观上更好,还是完全取决于数据?Explain选项向我显示,优化器确实以不同的方式执行查询。这只是一个例子,我的应用程序中会有很多这样的查询,我想知道执行这种过滤的最佳方法Orientdb 图形查询-where out vs select展开,orientdb,Orientdb,这些解决方案中有一个客观上更好,还是完全取决于数据?Explain选项向我显示,优化器确实以不同的方式执行查询。这只是一个例子,我的应用程序中会有很多这样的查询,我想知道执行这种过滤的最佳方法 SELECT * FROM (SELECT expand(in('hasPermission')) FROM Permission WHERE type IN ['USER']) WHERE login >="admin" ORDER BY
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中的查询优化器只开始扫描(或查询索引)目标类(第一个查询中的权限,第二个用户),然后遍历。 如果在
type
属性中有“USER”的权限记录很少,并且每个权限的传入边数较低,则第一个查询会更有效。如果你在类型上有一个索引,那就更好了
如果只有少数用户具有登录名
>“admin”(同样,可能有索引),并且每个用户的出站边缘数较低,则第二个查询会更有效。这正是我所怀疑的。感谢您解释查询优化器的内部工作原理-这使您的答案更有价值。哦,我还学到了这叫做查询旋转。对于第二个查询,是否可以创建适合这种查询的复合索引?不,不幸的是,在这种情况下不使用“连接”元素上的索引。即,Permission.type上的索引不会在第二次查询中使用