반응형

1. 인덱스(INDEX) 란?

데이터베이스에 저장된 자료를 더욱 빠르게 조회하기 위해 인덱스를 생성하여 사용한다. 일반적으로, 인덱스는 테이블의 전체 데이터 중에서 10 ~ 15% 이하의 데이터를 처리하는 경우에 효율적이며, 그 이상의 데이터를 처리할 땐 인덱스를 사용하지 않는 것이 더 좋다.

 

2. B*Tree 구조

가장 많이 사용되는 인덱스의 구조라고 할 수 있으며, 인덱스의 데이터 저장 방식에 사용된다. B*Tree 구조는 Root, Branch, Leaf Node로 구성되어 있다. 리프 노드는 인덱스 칼럼의 값과 ROWID를 가지고 이루어져 있다. 그래서 리프 노드에는 오름차순이나 내림차순으로 정렬되어 저장이 된다.

 

B*Tree 구조는 ORDER BY에 의한 Sort를 피할 수 있다. 이 Sort를 해버리면 그만큼 메모리를 많이 먹고, 시간도 오래 걸린다.

 

3. 인덱스(INDEX) 선정 절차

1) 프로그램 개발에 이용된 모든 테이블에 대해 Aceess Path 조사

2) 인덱스 컬럼 선정 및 분포 조사

3) Critical Access Path 결정 및 우선 순위 선정

4) 인덱스 컬럼의 조합 및 순서 결정

5) 생성 및 테스트

6) 프로그램 반영

7) 적용

 

4. 인덱스(INDEX) 생성 및 변경 시 고려사항

1) 프로그램 동작 영향성 검토

2) 인덱스 생성 및 변경으로 인한 DML 작업 속도 측정

3) 결합 인덱스 생성 검토

 

5. 인덱스(INDEX) 스캔 원리

옵티마이저가 인덱스 사용을 위한 실행계획을 수립한다.

1) 조건을 만족하는 최초의 인덱스 row를 찾는다.

2) Access된 인덱스 row의 ROWID를 이용해 테이블에 있는 row를 찾는다(Random Access)

3) 처리 범위가 끝날 때까지 차례대로 다음 인덱스 row를 찾으면서 2번을 반복한다.

 

6. 고유 인덱스(Unique INDEX)

1) Equal

2) Range

3) LIKE -> LIKE는 앞 % 주지 않도록 해야 한다.

 

7. 인덱스 스캔

조건에 의한 처리범위가 넓어지면, 분포도가 나빠지는 경우가 있는데 이 경우에는 인덱스 스캔보다는 풀스캔을 사용하는게 좋다. 풀 스캔 같은 경우에는 한번의 I/O때마다 여러 개의 block을 처리하기 때문에 I/O 횟수가 감소한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기