INDEX 구조
Balance*Tree
node
- root: 트리의 시작점
- branch : leaf 노드의 위치와 저장된 값의 범위를 저장
- leaf 데이터 저장
탐색
- root에서 leaf node까지 depth가균일한트리
- leaf node에 저장되는 데이터를 탐색시 모든 데이터에 접근속도가 비슷
정렬이 되어있기 때문에 원하는 데이터의 위치를 빠르게 접근
인덱스 접근, 인덱스를 통한 테이블 접근은 모두 Single block I/O
- DBMS에서는 한행을 읽어도 해당 행이 속한 block 전체를 조회
- 인덱스를 통해 대량의 데이터를 Single block I/O가 발생하면 전체 읽기(Multiblock I/O) 보다 성능이 느릴 수 있다

INDEX를 활용하지 못하는경우
- 컬럼(좌변)을 가공
- 부정형 연산 ( !=, NOT )
- NULL 비교
- LIKE 연산시 와일드카드의 선행 ( LIKE '%s' )

컬럼을 가공

컬럼을 가공 → 개선

부정형 연산 (개선방안은 다른 논리적인 방법이 있는지 찾아보는것)

Null 비교

Null 비교 (index를 쓰긴했지만 Full 스캔을 함 / 효율적이지 못함)
NOT NULL 제약의 중요성
- OPTIMIZER 입장에서는 테이블 제약조건을 보고 인덱스 사용유무를 판단하는 중요한기준
- 값이 항상 존재하는 컬럼에 NOT NULL제약을 사용하지 않을경우
- 인덱스를 활용하지 않는 형태의 실행계획이 작성될 수 있다*

Null 비교 → 개선

LIKE 연산시 선행 와일드 카드
반응형
'IT > SQL' 카테고리의 다른 글
| [ORACLE]실행계획 (0) | 2022.01.11 |
|---|---|
| [ORACLE]PL/SQL (0) | 2022.01.11 |
| [ORACLE] Window 함수, 분석함수 (0) | 2022.01.11 |
| [ORACLE]계층쿼리 (0) | 2022.01.11 |
| [ORACLE]Subquery Advanced (0) | 2022.01.11 |