使用非常大的数据集优化neo4j cypher查询

时间:2016-02-01 17:09:53

标签: neo4j cypher

我正在试图弄清楚如何在非常大的数据集上优化密码查询。我想在同一个城市找到2或3度朋友。我当前的密码查询是,运行时间超过1分钟:

match (n:User {id: 123})-[:LIVES_IN]->()<-[:LIVES_IN]-(u:User), (n)-[:FRIENDS_WITH*2..3]-(u) WHERE u.age >= 20 AND u.age <= 36 return u limit 100

大约有500K用户节点和500M FRIENDS_WITH关系。我已经有了id和age属性的索引。查询似乎在FRIENDS_WITH要求上窒息。有没有办法以不同的方式考虑这个问题或优化密码以使其实时(即最大时间1-2秒)?

以下是查询的个人资料:

Imgur

感谢。

1 个答案:

答案 0 :(得分:0)

在标签User:

的id属性上创建索引
CREATE INDEX ON :User(id)

有关详细信息,请参阅架构索引的文档http://neo4j.com/docs/stable/query-schema-index.html

如果这无法帮助添加PROFILE查询结果,我们可以为您提供更多帮助

PROFILE MATCH ... rest of your query

同样值得尝试以下列方式重写查询:

MATCH (n:User {id: 123})-[:LIVES_IN]->()<-[:LIVES_IN]-(u:User),
(n)-[:FRIENDS_WITH*2..3]-(u)
WHERE u.age >= 20 AND u.age <= 36 
return u limit 100