我正在试图弄清楚如何在非常大的数据集上优化密码查询。我想在同一个城市找到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秒)?
以下是查询的个人资料:
感谢。
答案 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