图查询 - where out vs select expand
Graph query - where out vs select expand
这些解决方案中的一种客观上更好,还是完全取决于数据? 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 中的查询优化器刚刚开始扫描(或查询索引)目标 class(第一个查询中的权限,第二个查询中的用户)然后继续遍历。
如果在 type
属性中具有 "USER" 的权限记录很少,并且每个权限的传入边数较少,则第一个查询会更有效。如果你在 type
上有索引就更好了
如果 login
> "admin" 的用户很少(同样,可能有索引),并且每个用户的传出边数较少,则第二个查询效率更高。
这些解决方案中的一种客观上更好,还是完全取决于数据? 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 中的查询优化器刚刚开始扫描(或查询索引)目标 class(第一个查询中的权限,第二个查询中的用户)然后继续遍历。
如果在 type
属性中具有 "USER" 的权限记录很少,并且每个权限的传入边数较少,则第一个查询会更有效。如果你在 type
如果 login
> "admin" 的用户很少(同样,可能有索引),并且每个用户的传出边数较少,则第二个查询效率更高。