我的查询时间非常长,我无法确定问题所在。
我有一个包含6685个节点,26407个属性和22921个关系的图形数据库,在具有1.7GB RAM的Amazon EC2实例上运行。
我的用例是将人们映射到他们的各种兴趣点,并找到给定用户,他们是与他有共同兴趣的人。
我的数据库中有大约500人的数据,每个人平均有超过100个与他相关的不同兴趣点。
1)当我运行这个密码查询时:
START u=node(5) MATCH (u)-[:interests]->(i)<-[:interests]-(o) RETURN o;
这里节点(5)是用户节点。因此,我试图找到与用户(u)具有相同“:interest”关系的所有用户。
此查询返回2557行,大约需要350毫秒。
2)当我加入一些额外的MATCH条件时,查询时间呈指数级下降。
例如,如果我想找到与user(u)= node(5)有共同兴趣的所有用户,并且也分享同一个家乡,我写道:
START u=node(5)
MATCH (u)-[:interests]->(i)<-[:interests]-(o)
WITH u,o,i
MATCH (u)-[:hometown]->(h)<-[:hometown]-(o)
RETURN u, o, i, h;
此查询返回755行,大约需要2500毫秒!
3)如果我向MATCH添加更多约束,如同性别,相同的母校等,查询时间逐渐恶化到> 10,000 ms。
我在这里做错了什么?
答案 0 :(得分:2)
您是否可以尝试在第一个MATCH
子句中说明整个模式,即MATCH (u)-[:interests]->(i)<-[:interests]-(o)-[:hometown]->(h)<-[:hometown]-(o)
?