Sort Order by 대체
- where A=값 order by B 일 때 A+B 인덱스를 사용한다면 sort order by 연산을 대체할 수 있다.
( A 만 있거다 A와 B 사이에 다른 컬럼이 있으면 sort order by 연산을 대체 할 수 없다. )
- 물론, 소트해야 할 대상 레코드가 무수히 많고 그 중 일부만 읽고 멈출 수 있는 업무에서만
이 방식이 유리하다. 인덱스를 스캔하면서 결과집합을 끝까지 Fetch 한다면 오히려 I/O 및
리소스 사용 측면에서 손해다. 대상 레코드가 소량일 때는 소트가 발생하더라도
부하가 크지 않아 개선 효과도 미미하다.
Sort Group By 대체
- group 절에 사용 된 컬럼이 선두인 결합 인덱스나 단일 컬럼 인덱스를 사용한다면
sort group by 연산을 대체할 수 있다.
( 'sort group by nosort' 가 실행계획으로 표시 된다. )
- 이처럼 인덱스를 이용한 nosort 방식으로 수행될 때는 group by 오퍼레이션에도 불구하고
부분범위처리가 가능해져 OLTP환경에서 매우 극적인 성능 개선 효과를 얻을 수 있다.
인덱스가 소트 연산을 대체하지 못하는 경우
- 인덱스 사용보다 full table scan이 효과적일 때
- 인덱스를 사용할 해당 컬럼에 not null 제약이 추가 되지 않았을 때
( group by도 마찬가지다. group by nosort를 우해 사용하려는 인덱스가 단일 컬럼
인덱스일 때는 해당 컬럼에 not null 제약이 설정돼 있ㅇ야 제대로 작동한다. )
- order by 절에 nulls first 구문을 사용하는 경우
( 마찬가지 원리로 인덱스를 뒤쪽부터 읽으려고 index_desc 힌트를 쓰면 null 값들이
먼저 출력 될텐대, null 값들을나중에 출력하려고 nulls last 구문을 사용하면 소트가 발생한다.)
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 5-7. Sort Area 크기 조정 (0) | 2016.12.26 |
---|---|
성능고도화 5-6. Sort Area를 적게 사용하도록 SQL 작성 (0) | 2016.12.26 |
성능고도화 5-4. 소트가 발생하지 않도록 SQL 작성 (0) | 2016.12.26 |
성능고도화 5-3. 데이터 모델 측면에서의 검토 (0) | 2016.12.26 |
성능고도화 5-2. 소트를 발생시키는 오퍼레이션 (0) | 2016.12.26 |