728x90
정렬은 데이터베이스에서 많은 부하를 일으킨다. 데이터베이스를 사용하는 대부분의 경우 데이터의 양이 매우매우 많기 때문에 그 데이터를 정렬하기는 부담이다. 가용 메모리로 데이터를 커버할 수 없는 경우 디스크까지 찾아가야 한다. 하지만 우리가 인덱스를 적절하게 잘 사용한다면 데이터베이스에서도 불필요한 Sort를 하지 않게된다.
1️⃣ Merge Join
Sort 원인 : Merge Join은 알고리즘 특성상 Merge 전 Sort를 한다. 사용할 때 유의해야 한다.
✅ 애초에 정렬된 인덱스인 Clustered Index를 사용하면 Sort 없이 조인을 할 수 있다.
2️⃣ ORDER BY
사용자가 원하는 순서로 정렬을 하기 위해 Sort가 사용된다.
✅ 테이블에 있는 인덱스 순서로 정렬을 한다면 불필요한 Sort를 하지 않아도 된다.
3️⃣ GROUP BY
집계를 위해 정렬이 사용된다.
4️⃣ DISTINCT
중복을 제거하기 위해 정렬을 사용한다.
5️⃣ UNION
중복을 제거하기 위해 정렬을 사용한다.
6️⃣ RANKING WINDOW FUNCTION
집계를 위해 정렬이 사용된다.
7️⃣ MIN MAX etc.
해결법이 없는 밑에 있는 케이스도 위의 두 가지와 마찬가지이다. 정렬이 필요한 부분이 인덱스로 이루어져있는지 살펴보고 인덱스 순서대로 데이터를 뽑아온다면 불필요한 Sort가 사라진다. 프로그램 부하가 줄어들고 가용 메모리 내에서 데이터베이스를 사용할 수 있게 된다.
728x90
'공부 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] SQL 에러 상태: 실패 -테스트 실패: Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor (0) | 2024.03.28 |
---|---|
[데이터베이스] JOIN(조인) : Nested Loop, Merge, Hash (0) | 2022.07.08 |
[데이터베이스] Transaction(트랜잭션)이란? (0) | 2022.07.07 |
[데이터베이스] 복합인덱스란? (0) | 2022.07.07 |
[데이터베이스] Clustered Index와 Non-Clustered Index (0) | 2022.07.02 |