-
인덱스(Index)
- 인덱스(Index)란
- 데이터베이스 테이블의 모든 데이터를 검색해서 원하는 결과 값을 가져오려면 시간이 오래 걸리기 때문에, 특정 칼럼에 인덱스를 부여해서 정렬하는 것을 의미함
- 데이터가 저장된 칼럼의 값과 레코드가 저장된 주소의 키와 값의 쌍으로 인덱스를 만든다.
- 기본적으로 기본키가 인덱스의 기능을 하기는 한다.
- Index 의 성능과 고려해야할 사항
- 인덱스를 기준으로 정렬된 상태를 유지하기 때문에 원하는 값을 탐색하는데 빠르다.
- 하지만, 새로운 값을 추가,삭제,수정하는 경우에는 쿼리문 실행 속도가 느려진다. ~> 트리구조로 관리하고 있기 때문에
- B-Tree & B+Tree
- B-Tree는 데이터가 정렬된 상태로 유지되는 트리
- 루트 노드와 브랜치 노드, 리프 노드로 이루어져서, 어떠한 값에 대해서도 가지에 도달하는 시간이 같기 때문에 같은 시간에 결과를 얻음
- B+Tree는 B-Tree의 확장 개념
- B-Tree는 branch 노드에 key와 data를 담을 수 있지만, B+Tree는 노드에 key만 담아두고 데이터는 담지 않는다. 리프노드에만 key와 data를 저장하고, 리프노드끼리 LinkedList로 연결됨
- 메모리를 더 많이 확보 ~> 더 많은 key 수용 ~> 트리 깊이가 얕아짐
- Hash 인덱스 알고리즘
- 컬럼의 값으로 해시 값을 계산해서 인덱싱하는 알고리즘
- 매우 빠른 검색
- 특정 문자로 시작하는 값으로 검색을 하는 전방 일치와 같이 값의 일부만으로 검색하고자 할 때는 사용 불가
- 메모리 기반의 데이터베이스에서 많이 사용
- 클러스터드 인덱스(Clustered Index)
- 프라이머리 키 값이 비슷한 레코드 끼리 묶어서 저장
- Primary Key를 지정하지 않으면 Not Null로 설정한 복합키를 묶어서 저장
- 테이블당 한 개만 생성 가능
- 행 데이터를 인덱스로 지정한 열에 맞춰서 자동 정렬함