나는 간단한 쿼리과 같이 있습니다neo4j 왕복 경기
MATCH (u1:User {id: 1})-[:WANTS]->(:Card)<-[:HAS]-(u2:User)
WITH u1, u2
MATCH (u1)-[:HAS]->(:Card)<-[:WANTS]-(u2)
RETURN COUNT(DISTINCT u2.id)
이제 사용자 1은 자신이 관심, 그 (500) 사이에, 그 관심 (150)가 500 명의 사용자를 가지고있다. 쿼리가 너무 단순 해 보이기 때문에 조금 이상하지만 22 초 내에 인덱스를 생성하는 데 필요한 모든 필드가 인덱싱됩니다. 난 그냥 쿼리가 있는지 알고 싶어
MATCH (u1:User {id: 1})-[:WANTS]->(:Card)<-[:HAS]-(u2:User)
RETURN COUNT(DISTINCT u2.id)
// COUNT(DISTINCT u2.id)
// 556
// Returned 1 row in 220 ms
MATCH (u1:User {id: 1})-[:HAS]->(:Card)<-[:WANTS]-(u2:User)
RETURN COUNT(DISTINCT u2.id)
// COUNT(DISTINCT u2.id)
// 14351
// Returned 1 row in 375 ms
: I 별도로 쿼리 방향의 각을 할 때, 그들은 빠른 것으로 판명
COUNT(DISTINCT u2.id)
151
Returned 1 row in 22270 ms
마음 : 여기
내 출력 나는 neo4j가 그것의 뒤에 묶인 한 손으로 이것을 할 수 있기 때문에 최적화 될 수있다.미리 감사드립니다.
안녕하세요 짐, 입력 해 주셔서 감사합니다. 전체 쿼리는 151 노드를 반환하는 데 17 초가 걸립니다. 나는 각 경기가 얼마나 오래 걸리는지를보기 위해 질의를 해봤 읍니다. 마지막'MATCH'를 제외하고는 모두 300ms + 만 걸립니다. 마지막 경기에서 17 초가됩니다. 왜 그런가? – voldomazta
짐, 나는 질문을 더 많은 정보로 업데이트했다. 나는 각각의 쿼리 방향에 대한 결과를 추가했으며 빠른 것으로 보였다. 비켜나는 뭔가가 있지만 손가락을 대지 못합니다. – voldomazta
사용자 1이 사용자 1이 원하는 카드를 가지고있는 곳에서 사이버 탐 (cybersam)이 제안한 사례가있을 가능성이 있습니까? 그렇다면 자체 참조 루프가 있습니까? –