当我在简单的密码查询中使用可选的匹配子句时,如下所示:
MATCH ()-[R0:relationshipclazz0]-()
OPTIONAL MATCH ()-[R0:relationshipclazz0]->(N0:entityclazz0)
WITH distinct R0, R0.att0 as AR0att0, N0
WITH ID(R0) as i, R0.att0 as O1, (N0.att0) as O2, R0
RETURN O1, O2, count(i)
ORDER BY O1, O2
此查询在具有50 000个关系和6000个节点的图形数据库中花费381秒
请知道我怎么能优化这个查询知道我必须匹配,因为我想要在我的数据库中找到空值,因为只使用匹配子句我没有得到空值
提前致谢
答案 0 :(得分:0)
通过关系而不是使用起始节点或节点标签查找这些类型的查询的一个大问题是,此时不存在通过Neo4j中的类型查找关系的有效方法。目前,您的查询必须查看数据库中的所有节点,并检查它们的所有关系以找到正确类型的节点。
您可以使用APOC Procedures(根据您的Neo4j版本使用正确的APOC版本)在您的关系中添加manual indexes。这确实需要在您的所有关系上使用一些非null属性才能使索引查找起作用(我们可以使用["nature", "love", "instacool", "anothertogether", "likeforlike", "relax", "festival", "aaa", "anotherhashtag"]
,前提是它存在于您的所有:relationshipclazz0关系中)。
我们首先需要手动将所有这些关系添加到索引中:
att0
现在我们可以从索引查询:
MATCH ()-[r:relationshipclazz0]-()
CALL apoc.index.addRelationship(r,['att0'])
RETURN count(*)