Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orientdb 图形查询-where out vs select展开_Orientdb - Fatal编程技术网

Orientdb 图形查询-where out vs select展开

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

这些解决方案中有一个客观上更好,还是完全取决于数据?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中的查询优化器只开始扫描(或查询索引)目标类(第一个查询中的权限,第二个用户),然后遍历。 如果在
type
属性中有“USER”的权限记录很少,并且每个权限的传入边数较低,则第一个查询会更有效。如果你在
类型上有一个索引,那就更好了


如果只有少数用户具有
登录名
>“admin”(同样,可能有索引),并且每个用户的出站边缘数较低,则第二个查询会更有效。

这正是我所怀疑的。感谢您解释查询优化器的内部工作原理-这使您的答案更有价值。哦,我还学到了这叫做查询旋转。对于第二个查询,是否可以创建适合这种查询的复合索引?不,不幸的是,在这种情况下不使用“连接”元素上的索引。即,Permission.type上的索引不会在第二次查询中使用