Neo4J / Cypher查询非常慢,按属性排序

时间:2014-04-25 08:09:40

标签: database graph neo4j cypher

我有一个包含5M节点和10M关系的图形数据库。 我在配备4GB RAM的Macbook Pro上。我已经尝试调整java堆大小和neo4j内存而没有成功。

我的问题是我有一个简单的密码查询:

MATCH (pet:Pet {id:52163})-[r:FOLLOWS]->(friend) 
MATCH (friend)-[r:POSTED]->(n) 
RETURN friend.id, TYPE(r),LABELS(n),n.id
LIMIT 30;

此查询需要100毫秒,这令人印象深刻。但是当我添加一个" ORDER BY"此查询需要很长时间=> 8s:/

MATCH (pet:Pet {id:52163})-[r:FOLLOWS]->(friend) 
MATCH (friend)-[r:POSTED]->(n) 
RETURN friend.id, TYPE(r),LABELS(n),n.id
ORDER BY r.date DESC
LIMIT 30;

有人有想法吗?

2 个答案:

答案 0 :(得分:0)

您可能需要考虑使用relationship indexes来加快查询速度。 date属性可以这种方式编入索引。您正在使用ORDER BY关键字,这几乎总是会使您的查询变慢,因为它需要迭代整个结果集来执行排序。

如果符合您的需要,还可以考虑使用单个MATCH语句:

MATCH (pet:Pet {id:52163})-[r:FOLLOWS]->(friend)-[r:POSTED]->(n) 

答案 1 :(得分:0)

感谢您的回答!

我使用Michael Hunger的批量导入程序重新导入了我的数据库,并在date属性上使用了node_auto_index和relationship_auto_index。

这些索引似乎都没问题,所有与date属性的关系都被编入索引。

但查询仍然太长......没有任何改变