DB 테이블에 대한 검색 성능의 속도를 높여주는 자료 구조
"인덱스" = "책에 있는 목차"
블럭 (Block)
"데이터들의 정렬"로 조건 검색에서 장점을 가짐
조건 검색 Where 절의 효율성
풀 테이블 스캔(데이터를 찾을 때 레코드의 처음~끝 다 읽는 것)해서, 검색 조건과 맞는지 비교하는 것은 비효율적
그러나, 인덱스 테이블은 데이터들이 정렬되어 저장되므로, 조건에 맞는 데이터를 빠르게 찾을 수 있음
정렬 Order by 절의 효율성
Order by는 정렬과 동시에 메모리상에서 정렬(Sort과정)이 이루어지기 때문에 부하 多 걸림
그러나, 인덱스는 이미 정렬된 데이터를 가져오기만 하기 때문
MIN, MAX의 효율적인 처리가 가능
풀 테이블 스캔(데이터를 찾을 때 레코드의 처음~끝 다 읽는 것)은 비효율적
그러나, 인덱스는 MIN값과 MAX값을 레코드의 시작값과 끝 값 한건씩만 가져오면 되기 때문
정렬된 상태 계속 유지 필요
데이터가 추가되거나 값이 바뀐다면(INSERT, UPDATE, DELETE를 통해)
인덱스 테이블 내에 있는 값들을 다시 정렬을 해야 함
++ 인덱스 테이블, 원본 테이블 이렇게 두 군데에 데이터 수정 작업해줘야 한다는 단점도 존재
테이블의 전체 데이터 중에서 10~15% 이하의 데이터를 처리하는 경우에만 효율적
그 이상의 데이터를 처리할 땐 인덱스를 사용하지 않는 것이 더 낫다.
++ 인덱스를 관리하기 위해서는 데이터베이스의 약 10%에 해당하는 저장공간이 추가로 필요
인덱스 키를 여러개 잡는 것
두 개 이상의 컬럼을 합쳐서 인덱스를 만드는 것
예시
참고: [DB] 데이터베이스 인덱스(Index) 란 무엇인가?
참고: 인덱스 기본개념
참고: DB 인덱스를 설정하면 왜 빨라지나?
참고: [DB 6편] MySQL 인덱스 성능 관련 정리 (prefix, 복합인덱스)