Index ???
1️⃣ 인덱스란?
- 인덱스는 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료 구조입니다.
- 테이블을 만들고 저장할 때, 데이터는 내부적으로 힙영역(Heap)에 저장이 됩니다. 만약 인덱스가 없는 테이블 혹은 컬럼으로 조회를 하게 되면 테이블 전체를 뒤지는 풀 스캔을 하게됩니다.
- 특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장됩니다.
- 인덱스가 생성 되었다면 쿼리문에 인덱스 생성 컬럼을 WHERE 조건으로 거는 등의 작업을 하면 옵티마이저에서 판단하여 생성된 인덱스를 탈 수가 있습니다.
- 옵티마이저? 옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진입니다. (컴퓨터의 CPU처럼 DMBS의 CPU는 옵티마이저라고 할 수 있습니다.)
- 인덱스는 insert, update, delete 등을 하게되면 index를 재갱신 하기 때문에 입력, 수정, 삭제는 최대한 적고 검색이 많은 테이블에서 최고의 성능을 뽑을 수 있습니다.

<aside>
🔥 책 뒷편에 “색인"을 인덱스의 역할로 볼 수 있습니다. 색인을 통해서 원하는 키워드에 대한 페이지로 바로 이동할 수 있습니다 !
</aside>
인덱스의 종류
- Clustered Index (클러스터드 인덱스)
- 테이블 당 한개만 생성이 가능하다. 기본키(PK)를 생성하면 자동으로 클러스터 인덱스를 생성한다.
- 해서, 클러스터 인덱스가 있으면 해당 인덱스를 기준으로 정렬을 하게 된다.
- NonClustered Index (넌클러스터드 인덱스)
- 한개의 테이블에 여러개의 인덱스를 선언할 수 있다. 클러스터인덱스 제외한 모든 인덱스를 말한다.
인덱스 생성, 삭제, 조회
CREATE CLUSTERED / NONCLUSTERED INDEX 인덱스명 ON 테이블명 (
정렬컬럼명 정렬기준(오름차순/내림차순)
)
# 예)
CREATE INDEX TestIndex ON TestTable(names)
DROP INDEX 테이블명.인덱스명