반응형

DB에서 사용하는 정렬 알고리즘

 

데이터베이스 시스템은 일반적인 프로그래밍 언어에서 사용하는 정렬 알고리즘 외에도, 대규모 데이터셋디스크 I/O를 고려한 최적화된 정렬 방식을 사용합니다.

 

알고리즘/기법 설명 사용 시점

퀵 정렬 (Quick Sort) 메모리 내에서 빠른 정렬을 위해 사용하는 알고리즘. 평균적으로 빠르지만 최악의 경우 O(n²) 발생 가능. 소규모 데이터셋 또는 메모리에 적재 가능한 경우.
병합 정렬 (Merge Sort) 데이터를 나누어 정렬한 후 병합하는 방식. 대규모 데이터셋이나 외부 정렬(디스크 기반)에 적합. 대용량 데이터셋, 메모리 초과 시 디스크 기반 정렬 (External Sort).
힙 정렬 (Heap Sort) 우선순위 큐(힙)을 사용해 특정 조건(TOP-N 쿼리 등)을 빠르게 정렬. LIMIT이 포함된 쿼리, TOP-N 결과 추출 시.
External Merge Sort 데이터가 메모리 크기를 초과하는 경우, 디스크를 활용하여 블록 단위로 데이터를 정렬한 후 병합. 메모리보다 큰 데이터셋 정렬 시, 디스크 기반 정렬 수행.
B-Tree 인덱스 기반 정렬 인덱스가 존재하는 경우, 인덱스를 활용해 추가 정렬 없이 빠르게 정렬된 결과 반환. ORDER BY에 인덱스 컬럼 사용 시.
Loose Index Scan 인덱스를 느슨하게 스캔하여 원하는 값만 추출하는 방식. 불필요한 정렬을 피하고 효율적인 결과를 제공. DISTINCT, GROUP BY, ORDER BY 최적화 시 사용.
Filesort (파일 정렬) 인덱스가 없는 경우, 데이터를 임시 파일로 내보내 정렬 후 다시 불러오는 방식. 메모리 기반디스크 기반으로 나뉨. 인덱스 없는 ORDER BY 시, 쿼리 실행 계획에 Using filesort 표시.
Sort-Merge Join 정렬 조인(Join) 수행 시 두 테이블을 각각 정렬한 후 병합하여 결과를 반환하는 방식. 대규모 테이블 간 조인 시, 인덱스가 없을 때 사용.
Hash 정렬 해시 테이블을 사용해 그룹화 및 정렬을 수행. 주로 GROUP BY나 DISTINCT 최적화에 활용. GROUP BY 또는 DISTINCT 시, Using temporary로 표시 가능.
반응형

'DB' 카테고리의 다른 글

Clustered vs NonClustered (index 개념)  (0) 2023.05.31
Procedure과 Function의 차이  (0) 2023.05.31

+ Recent posts