데이터베이스 테이블에서 데이터 찾는 법
- 테이블 전체 스캔
- 인덱스 이용
인덱스 튜닝의 두 가지 핵심요소
인덱스 ⇒ 큰 테이블에서 소량 데이터를 검색할 때 사용 ( ex : OLTP... )
- 인덱스 스캔 효율화 튜닝
- ⭐랜덤 액세스 최소화 튜닝
SQL 튜닝은 랜덤 I/O와의 전쟁이다
DB 성능이 느린 이유
디스크 I/O (특히 랜덤 I/O)가 많이 발생하면 느림
인덱스 구조
- 인덱스는 정렬되어 있는 구조이므로 번위 스캔 ( Range Scan )이 가능하다
- DBMS는 일반적으로 B-Tree 인덱스를 사용한다
- 루트와 브랜치 블록에있는 각 레코드는 하위 블록에 대한 주소값을 갖으며 키값은 하위 블록에 저장된 키값의 범위를 나타낸다
- 리프 블록에 저장된 각 레코드는 키값 순으로 정렬되어 있을 뿐 아니라, 테이블 레코드를 가리키는 주소값 (RowID)를 갖는다. 인덱스 키값이 같으면 RowID순으로 정렬된다.
인덱스 탐색 과정
- 수직적 탐색 : 인덱스 스캔 시작지점을 찾는 과정 ( 조건에 만족하는 첫번째 레코드를 찾는 과정 )
- 수평적 탐색 : 본격적으로 데이터를 찾는 과정
⇒ 인덱스 리프 블록 끼리는 서로 앞뒤 블록에 대한 주소값을 가지고 있는 양방향 연결리스트 ( double linked list ) 구조이다.