programming/database
Neo4j 쿼리 최적화의 비밀: PROFILE vs EXPLAIN, 차이점 한 방에 정리
jamie91
2025. 2. 25. 19:58
Neo4j에서 PROFILE
과 EXPLAIN
은 Cypher 쿼리의 실행 계획을 분석하는 데 사용되는 두 가지 키워드입니다. 이 둘은 비슷해 보이지만, 목적과 제공하는 정보에서 중요한 차이가 있습니다. 아래에서 PROFILE
과 EXPLAIN
의 차이점을 상세히 설명드리겠습니다.
PROFILE 설명
- 목적: 쿼리의 실제 실행 계획과 실행 통계를 제공합니다.
- 동작 방식:
- 쿼리를 실제로 실행하고, 실행 중 발생하는 작업(Operation)과 비용(Cost)을 상세히 보여줍니다.
- 실행 계획과 함께 실제 데이터(DB Hits, Rows, Time 등)를 제공합니다.
- 사용 예시:
PROFILE MATCH (p:Person)-[:ACTED_IN]->(m:Movie) RETURN p.name, m.title;
- 주요 정보:
- 실행 계획(Execution Plan): 쿼리가 어떤 순서로 실행되는지 그래프 형태로 보여줍니다.
- DB Hits: 데이터베이스에 접근한 횟수.
- Rows: 각 작업에서 반환된 행(Row)의 수.
- Time: 각 작업에 소요된 시간.
- 비용(Cost): 각 작업의 상대적 비용.
- 사용 사례:
- 쿼리의 성능 병목 현상을 파악할 때.
- 실제 실행 통계를 기반으로 쿼리를 최적화할 때.
EXPLAIN
설명
- 목적: 쿼리의 예상 실행 계획을 제공합니다.
- 동작 방식:
- 쿼리를 실행하지 않고, 실행 계획만 보여줍니다.
- 실제 데이터는 제공하지 않으며, 예상 비용만 표시합니다.
- 사용 예시:
EXPLAIN MATCH (p:Person)-[:ACTED_IN]->(m:Movie) RETURN p.name, m.title;
- 주요 정보:
- 실행 계획(Execution Plan): 쿼리가 어떤 순서로 실행될지 그래프 형태로 보여줍니다.
- 예상 비용(Estimated Cost): 각 작업의 예상 비용.
- 예상 행 수(Estimated Rows): 각 작업에서 예상되는 행의 수.
- 사용 사례:
- 쿼리의 실행 계획을 미리 확인할 때.
- 쿼리를 실행하지 않고 예상 비용을 분석할 때.
PROFILE
vs EXPLAIN
, 차이점 정리
구분 | PROFILE |
EXPLAIN |
---|---|---|
쿼리 실행 여부 | 쿼리를 실제로 실행합니다. | 쿼리를 실행하지 않습니다. |
제공 정보 | 실제 실행 계획, DB Hits, Rows, Time, 비용 등 실제 데이터. | 예상 실행 계획, 예상 비용, 예상 행 수 등 예상 데이터. |
사용 목적 | 쿼리의 실제 성능 분석 및 최적화. | 쿼리의 예상 실행 계획 확인. |
성능 영향 | 쿼리를 실행하므로 성능에 영향을 미칩니다. | 쿼리를 실행하지 않으므로 성능에 영향을 미치지 않습니다. |
예시로 이해하기
쿼리:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
WHERE m.title = 'The Matrix'
RETURN p.name;
EXPLAIN
결과:
- 쿼리를 실행하지 않고, 예상 실행 계획과 예상 비용만 보여줍니다.
- 예:
NodeIndexScan
,Expand
,Filter
,Projection
등의 작업 순서와 예상 비용.
PROFILE
결과:
- 쿼리를 실제로 실행하고, 실행 계획과 함께 실제 데이터(DB Hits, Rows, Time 등)를 보여줍니다.
- 예:
NodeIndexScan
에서 실제로 몇 번의 DB 접근이 발생했는지, 각 작업에서 반환된 행의 수 등.
결론
PROFILE
은 쿼리의 실제 실행 계획과 통계를 제공하므로, 성능 병목 현상을 파악하고 최적화할 때 사용합니다.EXPLAIN
은 쿼리를 실행하지 않고 예상 실행 계획만 제공하므로, 쿼리의 구조를 미리 확인할 때 사용합니다.
둘 다 쿼리 최적화에 유용하지만, 목적에 맞게 적절히 사용하는 것이 중요합니다! 😊
728x90
반응형