6. 데이터베이스
[인덱스(Index)란?]
인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는 것은 오랜시간이 걸린다. 그렇기때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 Index는 책의 색인과 같다.
데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고있다.
만약 Index를 적용하지 않은 컬럼을 조회한다면, 전체를 탐색하는 Full Scan이 수행된다. Full Scan은 전체를 비교하여 탐색하기 때문에 처리 속도가 떨어진다.
정리
- 책으로 비유하자면 목차로 비유할 수 있음
- DBMS에서 저장 성능을 희생하여 데이터 읽기 속도를 높이는 기능
- 데이터가 정렬되어 들어감
- 양이 많은 테이블에서 일부 데이터만 불러 왔을 때, 이를 풀 스캔시 처리 성능이 저하됨
- 종류
- B+-Tree 인덱스
- Hash 인덱스
- 칼럼 값으로 해시 값 계산하여 인덱싱
- 메모리 기반 DB에서 많이 사용
- 생성시 고려해야할 점
- 테이블 전체 로우 수 15% 이하 데이터 조회시 생성
- 테이블 건수가 적으면 인덱스 생성하지 않음. 풀스캔이 빠르다
- 자주 쓰는 컬럼을 앞으로 지정
- DML 시 인덱스에도 수정 작업이 동시에 발생하므로 DML이 많은 테이블은 인덱스 생성 하지 않음
[Commit과 RollBack]
- Commit
- 하나의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산
- Rollback
- 하나의 트랜잭션 처리가 비정상적으로 종료되어 DB의 일관성을 깨뜨렸을 때, 모든 연산을 취소시키는 연산
[인덱스의 자료구조]