코딩하는 문과생
[SQL] Oracle, Oracle 튜닝, 인덱스 본문
인덱스 이해하기
[예시]
select * from emp where empno = 201642
1. Index가 없는 경우
- 201642 정보가 디스크 어떤 블럭에 있는지 모르므로,
10만개 전부 디스크에서 DB Buffer 캐시로 복사한 뒤 Full Scan으로 찾아야 한다.
2. Index가 있는 경우
- where절의 조건으로 준 컬럼이 Index의 Key로 생성되어 있는지 확인한 뒤,
인덱스에 먼저 가서 201642정보가 어떤 ROWID를 가지고 있는지 확인한 뒤 해당 ROWID에 있는 블럭만 찾아가서 db Buffer 캐시에 복사하게 된다.
- 메모리에 위치한 Index 파일을 먼저 찾아 필요한 부분만 디스크에 Access한다.
-> 디스크 I/O가 줄어든다.
인덱스의 종류
1. B-tree 인덱스
: OLTP(Online Transaction Processing: 실시간 트랜잭션 처리)
실시간으로 데이터의 입력과 수정이 일어나는 환경에 많이 사용
2. Bitmap 인덱스
: OLAP(Online Analytical Procession: 온라인 분석 처리)
대량의 데이터를 한꺼번에 입력해 분석이나 통계정보 출력 시 많이 사용
데이터 값의 종류가 적고 동일한 데이터가 많은 경우 사용(ex. 지역 : 서울, 부산, 대구, 대전 등)
인덱스 사용여부 판단
인덱스 사용해야 하는 경우 | 인덱스 사용하지 말아야 하는 경우 |
테이블에 행의 수가 많을 때 | 테이블에 행의 수가 적을 때 |
WHERE문에 해당 컬럼이 많이 사용될 때 | WHERE문에 해당 컬럼이 자주 사용되지 않을 때 |
검색 결과가 전체 데이터의 2% ~ 4% 정도 일 때 | 검색 결과가 전체 데이터의 10% ~ 15% 이상일 때 |
JOIN에 자주 사용되는 컬럼이나 NULL을 포함하는 컬럼이 많은 경우 | 테이블에 DML작업이 많은 경우 즉, 입력 수정 삭제 등이 자주 일어날 때 |
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] 인덱스만 잘타도 조회속도가 빨라진다. (0) | 2020.06.20 |
---|---|
[SQL] 조건이 날짜인 경우, 조회속도 올리는 법 (2) | 2020.06.20 |
[SQL] Oracle, Oracle 튜닝, 오라클 메모리 구조 (0) | 2020.04.12 |
[SQL] Oracle, PL/SQL 간단 정리 (0) | 2020.04.04 |
[SQL] Oracle, 사용자, 권한, 롤 (0) | 2020.04.01 |