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