인덱스, Index
추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위해 데이터와 데이터의 위치를 포함한 자료구조를 생성한 것
인덱스(index)의 관리
- DBMS는 index를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있음
- 인덱스가 적용된 컬럼에 INSERT, UPDATE, DELETE가 수행된다면 추가적인 연산과 그에 따른 오버헤드가 발생
INSERT: 새로운 데이터에 대한 인덱스를 추가
DELETE: 삭제하는 데이터의 인덱스를 사용하지 않도록 처리
UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가
인덱스의 장점
- SELECT, UPDATE나 DELETE의 성능 향상
- 해당 연산을 수행하려면 해당 대상을 조회해야만 작업을 할 수 있기 때문
- index를 사용하지 않은 경우 Full Scan을 수행하여 전체를 탐색하기 때문에 처리 속도가 떨어짐
- 전반적인 시스템의 부하를 줄일 수 있음
인덱스의 단점
- 저장공간
DB의 약 10%에 해당하는 저장공간이 필요
- 추가작업 필요
인덱스 관리
- 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있음
- CREATE, DELETE, UPDATE가 빈번한 속성에 인덱스를 걸게 되면 인덱스의 크기가 비대해져서 성능이 오히려 저하되는 역효과가 발생할 수 있음
- UPDATE와 DELETE는 기존의 인덱스를 삭제하지 않고 '사용하지 않음' 처리하므로 UPDATE와 DELETE가 빈번하게 발생된다면 SQL문 처리 시 인덱스가 실제 데이터보다 더 많게 될 수 있음
인덱스(index)를 사용하면 좋은 경우
- 규모가 작지 않은 테이블
- INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
- JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
- 데이터의 중복도가 낮은 컬럼