我正在运行此查询:
MATCH (a:TEST:LOC1),(b:TEST_JOIN:LOC1),(c:TEST:LOC1)
WHERE a._out = b._in and b._out = c._in and c._text = 'P'
CREATE (a)-[r:TEST_JOIN]->(c)
运行速度非常慢,执行计划说: "此查询在断开连接的模式和#34;
之间构建笛卡尔积所有属性都已建立索引,我尝试过:
MATCH (c:TEST:LOC1) where c._text='P' with c
MATCH (a:TEST:LOC1),(b:TEST_JOIN:LOC1)
WHERE a._out = b._in and b._out = c._in
CREATE (a)-[r:TEST_JOIN]->(c)
对不起,如果这是基本的话。有谁知道如何优化这个?非常感谢提前。
答案 0 :(得分:2)
我会尝试这个
MATCH (c:TEST:LOC1) where c._text='P' with c
MATCH (b:TEST_JOIN:LOC1) where b._out = c._in with b, c
Match (a:Test:LOC1) WHERE a._out = b._in with a, c
CREATE (a)-[r:TEST_JOIN]->(c)
答案 1 :(得分:0)
问题是你的3个节点(a,b和c)中没有关系。您要求数据库获取所有节点,所有b节点和所有c节点,然后通过where子句过滤掉。这是一个笛卡尔积(https://en.wikipedia.org/wiki/Cartesian_product),表明你的模型不正确。
根据您的评论,您似乎想要像
这样的关系 (a)-[something]->(b)-[somethingElse]->(c)
这是您在进行查询之前需要设置的内容,以便您可以使用cypher根据图形模式进行匹配。