使用遍历的 Orientdb 计数性能

Orientdb performance of count with traverse use

我有一个数据库,其中包含大约 300,000 个用户以及这些用户之间的 800,000 个关系,这些数据可以这样描述:

用户 - 联系人 -> 用户

我想知道特定用户可能拥有的新联系人的数量,所以我写了这个查询来知道这个数量:

SELECT COUNT(*) FROM (TRAVERSE OUT() FROM (SELECT FROM Usuario WHERE user_id=12345) WHILE $depth <=2) WHERE $depth = 2

查询需要 5 秒(或多或少)。我将相同的数据存入 neo4j 数据库,相同级别的计数需要 450 毫秒。所以我想知道是否存在以最佳性能获取此信息(可能的新联系人数量)的方法。

通过将 NOTUNIQUE_HASH_INDEX 字段 user_id.

放入一个很好的改进

编辑 1

另一个提示,您可以尝试使用 'maxdepth' 而不是 'while depth <= 2.

SELECT COUNT (*) FROM (TRAVERSE OUT () FROM (SELECT FROM Usuario WHERE user_id = 12345) WHILE $ MAXDEPTH = 2) WHERE $ depth = 2

计算时间略有不同,因为while $depth也会在level 3进行评估,然后记录因为不匹配while而被跳过,但是在同时它们被加载,这会花费执行时间。使用 maxdepth,您只需在第 2 级停止执行。