2016-02-01 86 views
1

我想弄清楚如何在非常大的数据集上优化密码查询。我试图在同一个城市找到二,三级朋友。我现在的暗号查询,这需要1分钟运行:使用非常大的数据集优化neo4j密码查询

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和年龄属性的索引。该查询似乎对FRIENDS_WITH要求感到窒息。有什么方法可以以不同的方式思考这个问题,或者优化密码以使其实时(即最长时间1-2秒)?

这里的查询简介:

Imgur

感谢。

+0

你有一个测试数据库,你可以导出运行密码查询针对? – manonthemat

回答

0

创建标签用户的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 
+0

谢谢@ frant.hartm。我已使用个人资料更新了原始问题。我已经有了适当的索引。谢谢! – Jonathan