최근에는 그래프 데이터베이스와 Neo4j로 시작했습니다. Person, Company, City, Skill 사이에 하나 이상의 관계가있는 노드를 만들었습니다.Cypher 쿼리 성능 및 구조
하나의 Person 노드를 (노드 ID로) 찾은 다음이 사람과 관련된 모든 기술, 회사 등을 찾고자하는 사이퍼 쿼리를 수행하려고합니다. 이것은 지금까지 내 쿼리입니다 :
MATCH (person:Person)
WHERE ID (person) = 123
WITH person LIMIT 1
OPTIONAL MATCH (p:Person) - [:HAS_SKILL] -> (skill:Skill)
WHERE ID (p) = 123
WITH person, skill ORDER BY skill.name ASC
OPTIONAL MATCH (p:Person) - [:WORKED_AT] -> (company:Company)
WHERE ID (p) = 123
WITH person, skill, company ORDER BY company.name ASC
OPTIONAL MATCH (p:Person) - [:LIVES_IN] -> (city:City)
WHERE ID (p) = 123
WITH person
, collect(DISTINCT skill) as skills
, collect(DISTINCT company) as companies
, city LIMIT 1
RETURN person, skills, companies, city
나는 이것이 정말 최적의 쿼리 아니라고 걱정하고/우리가 얻을 때 만 개 노드의 몇 가지를 말할 수 있다면 정말 느린 것처럼 보인다. 누군가가 이런 종류의 쿼리를 구조화하는 더 좋은 방법을 말해 줄 수 있습니까? 여러 개의 작은 쿼리로 나눠야합니까?