2019년 4월 18일
데이터베이스 랜덤액세스 (Random Access)
I. DB성능 확보를 위한 랜덤액세스의 개념
데이터베이스 성능을 확보하기 위해 rowid 기반 인덱스 참조 후 한 번에 하나의 블록 액세스 하는 방식 |
II. 랜덤액세스의 유형
유형 | 항목 | 설명 |
---|---|---|
확인 랜덤 액세스 | 개념 | – WHERE 조건의 컬럼이 인덱스에 존재하지 않아 테이블을 액세스하는 랜덤액세스 |
특징 | – 랜덤액세스의 횟수보다 최종 결과가 동일하거나 적게 추출 | |
고려 사항 | – 인덱스 액세스 후 버려지는 데이터 발생 – 확인랜덤액세스 제거가 성능을 좌우 | |
추출 랜덤 액세스 | 개념 | – 인덱스 액세스 후 SELECT 절의 컬럼을 결과로 추출 위해 추가로 테이블에 액세스 |
특징 | – 랜덤액세스 횟수와 추출 데이터양 동일 – SELECT 절에서 발생 | |
고려 사항 | – 자주 사용 SQL, 인라인 뷰를 통한 RowID 이용, 컬럼이 많은 결합 인덱스 | |
정렬 랜덤 액세스 | 개념 | – ORDER BY, GROUP BY절 컬럼이 인덱스에 존재하지 않아 추기 테이블 액세스 |
특징 | – 랜덤액세스와 추출 데이터 양 동일 – ORDER BY, GROUP BY절에서 발생 | |
고려 사항 | – ORDER/GROUP BY절 컬럼 인덱스 추가 – 불필요한 ORDER/GROUP BY절 제거 |
- 랜덤액세스 중 추출되는 데이터를 감소시키는 확인랜덤액세스를 감소시키는 방안이 성능 측면에서 가장 중요
III. 랜덤액세스 최소화 사례
유형 | 사례 | 개선 사항 |
---|---|---|
확인랜덤 액세스 | SELECT 사번 FROM 사원 WHERE 부서=2 AND 나이=25; | – “나이” 컬럼 추가 → 1회씩 액세스 |
추출랜덤 액세스 | SELECT 이름 FROM 사원 WHERE 성별=”남”; | – “이름” 컬럼 추가 → “이름” 자주 사용 |
정렬랜덤 액세스 | SELECT 사번 FROM 사원 ORDER BY 나이 ASC; | – “나이” 컬럼 추가 → 성능 개선 |
- 랜덤액세스 최소화 위한 인덱스 추가는 상황에 맞게 고려하여 적용 필요