728x90
반응형
인덱스 란
- 데이터를 보다 빠르게 검색할 수 있도록 도와준다.
- 아무 옵션 없이 인덱스를 생성하게 되면 B-Tree 인덱스로 생성된다.
- 프라이머리 키나 유니크에 의해 자동으로 생성되는 인덱스(자동 인덱스)와 수동으로 만드는 인덱스가 있다.
- 인덱스 명은 중복이 안된다. (mysql에서는 중복 name이 되었는데 오라클은 안되더라)
인덱스 생성 시 고려할 점
인덱스 선정 기준
- 큰 테이블에서 적은 양의 데이터를 조회할 때 (통상 15% 이내)
- where 절이나 join, order by 에서 자주 사용되는 컬럼
- Null 값이 많이 포함된 컬럼
인덱스 주의 사항
- 테이블의 데이터가 적거나 결과가 15%를 초과한다면 오히려 성능이 떨어짐
- 수정, 삭제, 생성이 많은 테이블은 생성하지 않는 게 좋음
- 부정형 비교 ('!=', 'NOT IN')
- LIKE 사용 시 앞에 %가 붙을 경우 Full Scan이 이뤄짐
- or 조건
- 너무 많은 인덱스 생성
인덱스 종류
B-Tree | 범용적이고 범위 검색에 효과적이며 가장 일반적으로 사용됨. |
Bitmap | 중복된 값이 많고, 데이터 변경이 적은 경우 유리. |
Hash | 정확한 값 검색에 매우 빠르며, 범위 검색에는 부적합. |
Clustered | 데이터가 인덱스에 의해 정렬된 상태로 저장, 검색이 매우 빠름. |
Non-Clustered | 여러 개를 가질 수 있어 다양한 검색 조건에 유연하게 대응 가능. |
Full-Text | 텍스트 데이터의 전체 텍스트 검색에 유리. |
Spatial | 공간 데이터를 효율적으로 검색, GIS 애플리케이션에서 사용. |
일반적인 속도 비교
Hash > B-Tree > Bitmap > Clustered > Non-Clustered > Full-Text or Spatial
인덱스 SCAN 종류
Index Unique Scan | 고유한 인덱스를 사용하여 단 하나의 행을 검색. 가장 빠른 검색 방식. 기본 키 또는 고유키 검색. |
Index Range Scan | 인덱스에서 특정 범위의 값을 순차적으로 검색. 범위 조건 검색 (BETWEEN, <, > 등). |
Index Skip Scan | 다중 컬럼 인덱스에서 선행 컬럼을 건너뛰고 검색. 다중 컬럼 인덱스의 일부 컬럼만 조건으로 사용할 때. |
Index Fast Full Scan | 인덱스를 테이블처럼 사용해 모든 블록을 비순차적으로 읽음. 인덱스의 모든 컬럼을 읽을 때. |
Index Full Scan | 인덱스의 모든 엔트리를 순차적으로 읽음. 인덱스가 작고, 테이블 전체를 스캔하는 것보다 효율적일 때. |
Bitmap Index Scan | 비트맵 인덱스를 사용해 다수의 행을 효율적으로 검색. 데이터 중복도가 높고, 변경이 적으며 조회가 많은 경우. |
인덱스 SCAN 속도 비교
Index Unique Scan > Index Range Scan > Index Skip Scan > Index Fast Full Scan > Index Full Scan > Bitmap Index Scan
인덱스만 걸면 테이블 조회에서 속도가 빨라질 줄 알았는데
무작정 걸기보단 쿼리를 바꿔보고 인덱스도 걸어보고 힌트도 사용해보고 해야겠다.
튜닝 너무 어렵다.
728x90
반응형
'개발 > ORACLE' 카테고리의 다른 글
ORACLE - ORA-25156 ANSI 조인, (+) (2) | 2024.11.20 |
---|---|
Oracle 힌트절 (1) | 2024.11.07 |
Oracle Explain Plan Operation (0) | 2024.08.02 |
Oracle 튜닝 - 실행 계획 (0) | 2024.08.02 |
Oracle From 절에 2개 이상의 테이블 JOIN, (+) (0) | 2024.05.22 |