나의 개발 일상 기록
[ORACLE] 실행계획 보는 법 본문
실행계획

위 플랜을 해석하면 다음과 같습니다.
- ACCESS FULL : 고객 테이블 FULL SCAN(전체 접근)
- Cost = 633K : 633,000 비용 발생
- Card = 42M : 42,000,000건 (접근하는 레코드 수)
- Bytes = 15G : 15,000,000,000 (42,000,000 * 1 ROW의 총 길이)
ACCESS FULL은 고객 테이블을 FULL SCAN하겠다는 의미를 가집니다. 어떠한 인덱스도 통하지 않고 직접 접근해 전체 테이터를 읽는 다는 의미를 가진다고 할 수 있습니다. 실행계획에서 이 용어가 보인다는 것은 3가지 경우를 뜻합니다.
1. 해당 쿼리에 대한 적절한 인덱스가 존재하지 않은 경우로서 필요한 인덱스를 생성함으로 해결 가능합니다.
2. 인덱스는 존재하지만 부정확한 통계정보로 인하여 인덱스를 타이 않는 경우로서, 최선의 통계 정보를 구성하거나
힌트절을 사용해 해결할 수 있습니다.
3. 테이블 FULL SCAN하는 것이 인덱스를 통한 랜덤 엑세스보다 유리한 경우로서, 데이터 조회 범위가 커서 인덱스를
사용하는 것이 별로 효용성이 없을때입니다. 위의 쿼리는 조회조건이 없으므로 바로 이 경우에 해당이 됩니다.
1. Cost
- 비용을 의미합니다. 해당 쿼리가 동작되었을 때 소요하는 비용을 말합니다. 비용이 클수록 많은 일을 하고 있다고
생각하시면 됩니다. 즉 무거운 쿼리를 뜻합니다. 여기서 비용은 논리적 비용을 의미합니다.
2. Card
- 쿼리 조건에 맞는 레코드 건수를 의미합니다.
3. Bytes
- 쿼리 실행 시 발생하는 네트워크 트래픽을 의미합니다. 즉 I/O 발생량입니다. 1ROW를 구성하는 컬럼의 길이
총 합을 구한 후 Card값을 곱하면 됩니다.
4. 실행계획을 해석하는 순서
- 레벨(깊이)이 다른 경우에는 안쪽 레벨부터 해석합니다.
- 레벨(깊이)이 같은 경우에는 위에서 아래로 해석합니다.
'SQL' 카테고리의 다른 글
| [MySQL] Connection Blocked Error (0) | 2022.02.15 |
|---|---|
| [ORACLE] 실행계획 보는 법 #2 (0) | 2021.04.22 |
| [SQL] ORACLE 힌트절 (0) | 2021.04.20 |
| [SQL] 바인드 변수와 하드 파싱 (0) | 2021.03.17 |
| [ORACLE] SELECT문 (0) | 2021.03.17 |