반응형
SQL 수행 중 Sort 가 필요한 경우 dbms는 정해진 메모리 공간에 sort area 를 할당하고 정렬을 수행하곤 한다.
Oracle은 PGA(Private Global Area) 에 Sqlserver 는 버퍼캐시에 저장을 하곤 한다.
소트를 발생시키는 오퍼레이션은 아래와 같다.
- Sort Aggregate : 전체 로우를 대상으로 집계를 수행할 때 나타나며, 아래와 같이 Oracle 실행계획에 ‘sort’라는 표현이 사용됐지만 실제 소트가 발생하진 않는다. SQL Server 실행계획엔 ‘Stream Aggregate’라고 표시된다.
- Sort Order By : 정렬된 결과집합을 얻고자 할 때 나타난다.
- Sort Group By : Sorting 알고리즘을 사용해 그룹별 집계를 수행할 때 나타난다.
- Sort Unique : 선택된 결과집합에서 중복 레코드를 제거하고자 할 때 나타난다. Union 연산자나 아래와 같이 Distinct 연산자를 사용할 때가 대표적이다.
- Sort Join : Sort Merge Join을 수행할 때 나타난다.
- Window Sort : 윈도우 함수를 수행할 때 나타난다.
sort 튜닝의 성능을 데이터에 양에 따라 많이 성능에 영향을끼친다.
그러므로 아래와 같은 사항들을 고려해볼수 있다.
■데이터 모델 측면에서의 검토
- 정규화 및 반정규화 적절하게 사용
■소트가 발생하지 않도록 SQL 작성
- Union 대신 UnionAll
- Distinct 를 Exists 서브쿼리로
■인덱스를 이용한 소트 연산 대체
- 인덱스를 활용하여 min max 계산
■소트 영역을 적게 사용하도록 SQL 작성
- top N 사용
■소트 영역 크기 조정
반응형
'IT > Database' 카테고리의 다른 글
[Mysql]GROUP_CONCAT 관련(order by, 구분자, 인코딩) (30) | 2024.01.22 |
---|---|
UUID 만들기 / UUID,GUID 차이 (19) | 2024.01.05 |
최대, 최소값(GREATEST, LEAST) (34) | 2023.12.29 |
[mysql] 데이터 경로 변경(datadir) (34) | 2023.12.26 |
[Oracle] SQL*Developer 실행계획 확인하기 (43) | 2023.12.03 |
댓글