在250M节点,12B rel图中,我有大约12,000种不同的关系类型。
我有时希望运行一个查询,例如: 匹配(n)-[r]-(m),其中type(r)=“ located_in”返回n,r,m限制为10;
以返回具有located_in关系的所有内容。 这非常慢-在具有大量内存和为此DB优化的Java内存设置的大型系统上,上述过程要花费数小时。
我需要某种关系索引还是查询不佳?
谢谢。
答案 0 :(得分:1)
您可以通过在节点和关系上添加标签来显着提高查询性能,从而显着减少要搜索的相关节点和关系的数量。通过仅返回真正需要的属性而不是整个节点,可以进一步提高性能。
MATCH (n:TypeA)-[r:LOCATED_IN]->(m:TypeB) RETURN n.attributeA, r, m.attributeB LIMIT 10;
答案 1 :(得分:1)
查看查询的说明,您会注意到这是在执行AllNodesScan来查找您的起始节点,因此它与图形中的所有节点匹配,并扩展了图形中的所有关系。
正如ThirstForKnowledge所说,在图形中添加标签并在查询中使用标签会将其更改为NodeByLabelScan,因此它将仅访问具有给定标签的所有节点。
Neo4j不支持架构索引中的关系,尽管Neo4j 3.5.x允许您创建全文索引,该索引可用于为特定类型的关系建立属性索引。这可能有助于您的查找,但是您尚未显示希望获得这种关系的特定属性。