我有一个包含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;
有人有想法吗?
答案 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属性的关系都被编入索引。
但查询仍然太长......没有任何改变