DB에서 원하는 데이터를 찾을 시 우선 인덱스(index)로 해당 데이터의 위치 주소를 찾고, 위치 주소를 가지고 해당하는 데이터를 찾는다.
인덱스 사용 이유는 데이터를 생성(INSERT), 변화(UPDATE), 삭제(DELETE) 성능은 저하되지만, 데이터의 읽기검색(SELECT)의 성능을 향상 시키기 위함이다. 따라서 한 테이블에서 너무나 많은 컬럼에 인덱스를 생성하게 되면 데이터 저장 성능이 떨어지게 된다.
< Primary Key >
- 테이블의 하나의 레코드를 대표하는 컬럼 값으로 정해진 인덱스이다.
- 하나의 레코드를 식별할 수 있는 식별자로 불린다.
- NULL을 사용할 수 없다.
- 중복을 허용하지 않는다.
대표적으로 아래 세 가지 방식으로 데이터가 저장된다.
1) B-Tree Index
2) Hash Index
3) Fractal-Tree Index
이 중 B-Tree(Balanced Tree) Index가 가장 오래되고 안정된 저장 방식이다.
하지만 Binary Search Tree에는 큰 단점이 있다. 바로 한쪽 Branch에만 데이터가 몰릴 수 있다는 점이다. 이는 worst case시 테이블의 복잡도를 향상시킨다. 이 한계를 극복하고자 나온 방식이 스스로 균형을 찾는다는 의미인 Balanced Tree 이다.
Balanced Tree는 구조적으로는 Binary Search Tree와 비슷하지만 데이터 높이(층)를 자동으로 바로잡아주는 기능이 있다. 이는 데이터의 Insert, delete등의 시간 자원을 희생시키면서 Search 시간을 줄일 수 있다.
데이터베이스에는 인덱스와 실제 데이터가 따로 분류되어 저장된다.