2016-10-06 4 views
0

ID를 사용하여 노드를 검색하고 있습니다. 노드를 얻으면 노드 ID가 내가 가지고있는 ID 목록에 있는지 여부를 확인합니다.Cypher 일치 쿼리 작업의 모호성

i)Match and Retrieve 
ii)Retrieve and Match 

첫 번째 쿼리 :

MATCH (a{uid:4}) RETURN a 

두 번째 쿼리 : 첫 번째 쿼리에서

MATCH (a) WHERE a.uid in [1,2,3,4] RETURN a 

, AM I 그래서, 여기에 내가 두 가지 방법으로 쿼리의 성능을 분석 할 노드가 uid와 일치 할 때 노드를 가져 오거나 그렇지 않으면 노드를 검색하고 uid를 검사 할 때 4가 아니면 안된다.

두 번째 쿼리에서 노드를 검색하고 노드 ID가 목록에 있는지 확인합니다. 예이면 반환합니다.

첫 번째 쿼리의 기능이 모호합니다. 첫 번째 쿼리에서 정확히 무엇이 발생합니까?

답변

3

쿼리가 작성된 방식을 암시하는 것처럼 보이지만 작업간에 순서가 정의됩니다. Cypher는 선언적 언어입니다. 원하는 것을 말하면 가능한 가장 최적의 방법으로 실행을 처리합니다.

MATCH (a {uid: 4}) RETURN a 

MATCH (a) WHERE uid = 4 RETURN a 

두 쿼리로 노드를 찾기 위해 당신의 필요를 표현 사이의 차이는 전혀 없다 그 uid과 (서면으로) 노드의 전체 검사를 할 것입니다 엔진은 찾을 수 일치하는 것. 쿼리에 레이블을 추가하고 해당 레이블에 대해 uid에 대한 인덱스 또는 유니티 제약 조건이있는 경우 엔진은 인덱스 조회를 수행합니다. uid 다중 값 인덱스 룩업을 수행 할

CREATE CONSTRAINT ON (n:Node) ASSERT n.uid IS UNIQUE; 
MATCH (a:Node) WHERE uid IN [1, 2, 3, 4] RETURN a 

반면,리스트에 대해 검사한다 제외

MATCH (a) WHERE uid IN [1, 2, 3, 4] RETURN a 

또한, 풀 스캔을 수행한다.