장점
- 검색 속도가 빨라진다
- 시스템의 전체적인 성능 향상
단점
- 공간이 추가적으로 필요하다
- 처음 인덱스를 생성할 때 많은 시간이 소요된다
- 데이터 변경 작업인 insert, update, delete가 자주 일어나면(즉 검색 외의 다른 작업들) 성능이 저하된다
종류
- 클러스터형 인덱스
- 행 데이터를 본인의 열 기준으로 정렬
- 테이블당 하나만 생성 가능
- 보조 인덱스
- 별도 공간을 추가해 지정한 컬럼만 정렬해서 인덱스 운영
- 컬럼 단위 여러 개의 인덱스 생성 가능
자동 생성 인덱스 종류
- PK 제약 조건 ⇒ 클러스터형 인덱스 자동 생성
- Unique 제약 조건 ⇒ 보조 인덱스 자동 생성
- PK 없고 Unique, Not Null 제약조건 설정된 경우 ⇒ 클러스터형 인덱스 생성
인덱스 내부 작동 원리
- B-Tree(Balanced Tree, 균형 트리)
- 데이터를 한 개만 저장해도 페이지 단위로 할당된다.
- MySQL InnoDB 기준으로는 변형 B-Tree 자료구조를 이용해 인덱스 구현
- 컬럼 값을 변형하지 않고 정렬 상태를 유지한다
- 최상위 노드(루트 노드) - 브랜치 노드- 최하위 노드(리프 노드)
- 최하위 노드에 실제 데이터 레코드를 찾을 수 있는 주소값이 있다
- 페이지 분할
- 페이지에 공간이 없으면 새 페이지를 생성하고 기존 데이터를 양분해서 각 페이지에 재배치하고 링크를 수정한다.
인덱스 생성/변경/삭제하기
- 생성하기
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 인덱스명
ON 테이블명(컬럼명, …);
- 제거하기
DROP INDEX 인덱스명 ON 테이블명
ALTER TABLE 테이블명 DROP INDEX 인덱스명;
참고자료
https://www.maeil-mail.kr/question/60
매일메일 - 기술 면접 질문 구독 서비스
기술 면접 질문을 매일매일 메일로 보내드릴게요!
www.maeil-mail.kr
'DB' 카테고리의 다른 글
[DBMS] 사용자 관리 | 권한 부여하기 (0) | 2025.06.15 |
---|---|
[DBMS] 뷰 VIEW (0) | 2025.06.15 |
[DBMS] 테이블 (2) | 2025.06.15 |
[DBMS] SQL 고급 문법 - 데이터 타입, 내장함수 (4) | 2025.06.14 |
[DBMS] SQL 기본 개념 (0) | 2025.06.14 |