쿼리 행을 구축 명심하고 쿼리 작업이 구축되어 모든 행에서 실행 얻을 : 그 단계의
세부 사항이 표시됩니다.
일치하는 패턴에 클라이언트의 경로가 여러 개있을 수 있으므로 클라이언트는 동일한 n 및 m (그러나 r은 다를 수 있지만 다른 곳에서는 r을 사용하지 않는 것처럼 여러 행을 만듭니다. 쿼리, 나는 당신이 변수를 제거하는 것이 좋습니다).
즉, n과 고유 m 사이의 단일 관계를 병합한다는 의미 일지라도이 MERGE 연산은 실제로 n 및 m의 단일 중복 행마다 실행됩니다. 그 병합 중 하나가 관계를 만들 것이며, 나머지는 아무것도하지 않고 생성 된 관계에 일치하는 사이클을 낭비하게됩니다.
MERGE를 수행하기 전에 n과 m의 고유 한 쌍만 고려하여 db 히트를 낮출 수 있어야합니다.
쿼리가 우리가 관계가 존재하지 않는 n과 m만을 고려했기 때문에 MERGE 대신 CREATE를 안전하게 사용할 수 있으며 MERGE가 항상 MATCH를 시도하기 때문에 DB 히트를 절약 할 수 있습니다. 먼저 필요하지 않습니다.
향상된 쿼리는 다음과 같습니다
MATCH (n:Client{curp:'SOME_VALUE'})
WITH n
MATCH (n)-[:HIZO]-()-[:FB]-()-[:HIZO]-(m:Client)
WHERE n <> m
AND NOT (m)-[:FB]->(n)
WITH DISTINCT n, m
MERGE (n)-[:FB]->(m)
RETURN m.curp
편집
에 대한 병합 기능을 사용하여 쿼리를 반환 : FB 관계, 시도 CREATE 대신으로 확대됨에없는 결국 사용한다.
최적화 프로그램에서는 문제가되지 않지만 첫 번째 'WITH'의 핵심은 무엇입니까? –
시도해 보았습니다. (클라이언트 : {{HIZO} - [: HIZO] 하지만 병합에 아무런 차이가 없습니다. – zad
패턴에서 r 변수를 제거해 보았습니까 (사용하지 않으므로 필요하지 않으므로), 병합 전에 'DISTINCT n, m'을 추가 했습니까? – InverseFalcon