使用遍历使用计数的Orientdb性能

时间:2016-02-02 15:50:00

标签: orientdb

我有一个拥有大约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毫秒。所以我想知道是否存在某种方式来获得具有最佳性能的这些信息(可能的新联系人数量)。

1 个答案:

答案 0 :(得分:1)

通过将NOTUNIQUE_HASH_INDEX字段设置为user_id,可以获得很好的改进。

编辑1

您可以尝试使用的另一个提示&#39; maxdepth&#39;而不是&#39;而深度&lt; = 2.

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

计算时间方面略有不同,因为while $ depth也将在3级进行评估,然后记录被跳过,因为它们不匹配while,但是与此同时,他们被加载,并且它花费了执行时间。使用maxdepth,您只需停止执行第2级。