인덱스의 개념
- 인덱스는 데이터베이스 테이블의 특정 열(column)에 대한 참조 구조
- 인덱스를 통해 데이터를 빠르게 검색할 수 있음
- 인덱스는 B-Tree, Hash, Full-Text 등 다양한 방식으로 구현될 수 있음
인덱스의 장점
- 빠른 데이터 검색: 인덱스를 통해 테이블 전체를 스캔하지 않고도 데이터를 빠르게 찾을 수 있음
- 정렬된 데이터 액세스: 인덱스는 데이터를 정렬된 상태로 저장하므로 정렬된 데이터에 빠르게 접근할 수 있음
- 쿼리 최적화: 쿼리 옵티마이저는 인덱스를 활용하여 쿼리 실행 계획을 최적화할 수 있음
인덱스의 단점
- 인덱스 생성 및 유지를 위한 추가적인 오버헤드: 인덱스 생성 및 업데이트 시 추가적인 CPU와 디스크 I/O가 필요
- 인덱스 크기로 인해 추가 스토리지 공간 사용 / 테이블 데이터의 복사본이므로 추가적인 스토리지 공간이 필요
- 인덱스 적용이 부적절한 경우 성능 저하: 인덱스가 적절하지 않은 경우 오히려 성능이 저하될 수 있음
MySQL의 인덱스 유형
- B-Tree 인덱스: 가장 일반적인 인덱스 유형으로, 데이터를 정렬된 상태로 저장
- Hash 인덱스: 해시 함수를 사용하여 데이터를 저장하며, 특정 값 검색에 최적화됨
- Full-Text 인덱스: 문자열 데이터에 대한 전문 검색을 지원
- Spatial 인덱스: 공간 데이터(지리 정보)에 대한 검색을 지원
인덱스 관리
- 인덱스 생성: CREATE INDEX 문을 사용하여 인덱스를 생성할 수 있음
- 인덱스 삭제: DROP INDEX 문을 사용하여 인덱스를 삭제할 수 있음
- 인덱스 모니터링: SHOW INDEX 문을 사용하여 테이블의 인덱스 정보를 확인할 수 있음
- 인덱스 최적화: 인덱스 사용을 모니터링하고 필요에 따라 인덱스를 추가, 삭제, 재구축할 수 있음
인덱스 사용 전략
- 자주 사용되는 열에 대해 인덱스를 생성
- 복합 인덱스를 활용하여 여러 열을 동시에 인덱싱할 수 있음
- 인덱스 사용이 부적절한 경우(예: 테이블이 작은 경우, 인덱스 사용이 느린 경우) 인덱스를 제거
- 인덱스 사용 현황을 지속적으로 모니터링하고 필요에 따라 인덱스를 관리