출처(source) 및 참조
우선 인덱스가 데이터베이스의 테이블에 어떻게 적용되는지 정말 가볍게 살펴보자.
인덱스는 테이블의 열. 즉, 컬럼(Column) 단위로 생성된다.
이 때 컬럼은 하나일 수도 있고 2개 이상일 수도 있다.
MySQL 의 Index 는 클러스터드 인덱스(Clustered Index) 와 논클러스터드 인덱스(Non-Clustered Index) 또는 세컨더리 인덱스(Secondary Index) 라고 하는 보조 인덱스가 존재한다.
먼저 이 둘을 책과 비유하자면 클러스터드 인덱스의 경우 '영어 사전'과 같은 책이고, 보조 인덱스의 경우 책의 맨 뒷장에 '찾아보기' 가 존재하는 일반적인 책과 같다.
앞서 클러스터드 인덱스는 '영어 사전' 과 같다고 표현했다.
영어사전은 일반적인 책과 같이 '찾아보기' 페이지가 존재하지 않는다.
다만 목차가 존재하며 목차는 A~Z 까지 단어가 순서대로 정렬되어 있어 목차가 곧 해당 단어를 나타내게 되는데 즉, 목차 자체가 책의 내용과 같다는 것이다. => 내용 자체가 인덱스이다.
클러스터드 인덱스는 이와 같이 동작한다.
데이터베이스 테이블의 데이터(행 데이터)는 클러스터드 인덱스를 기준으로 자동 정렬되어진다는 것이다. (MySQL 의 경우 오름 차순 정렬이 되어짐.)
그리고 클러스터드 인덱스는 테이블당 1개만 생성할 수 있으며 중복된 값을 가질 수 없다.
앞선 특징들로 미루어볼 때 바로 Primary Key(PK) 가 떠오르는 사람들이 있을 수도 있을 것 같다.
맞다! 우리가 테이블의 특정 컬럼에 PK 를 생성하는 순간 자동으로 해당 컬럼에 클러스터드 인덱스가 생성된다.
즉, "특정 컬럼을 PK 로 지정한다." 라는 것은 곧 "해당 컬럼에 클러스터드 인덱스가 생성된다." 라는 것으로 기억할 수 있다.
보조 인덱스는 일반적인 책의 '찾아보기' 페이지와 같다고 표현했다.
이게 무슨 말이냐면 우리가 원하는 정보를 검색하기 위해 '찾아보기' 페이지를 살펴본 후에 해당 정보 옆에 표시된 페이지로 다시 이동해야 원하는 정보를 찾아낼 수 있다는 것이다.
보조 인덱스는 이와 같이 동작하게 된다.
그리고 '찾아보기' 페이지에는 많은 종류의 정보가 표시돼있는데 이와 같이 보조 인덱스는 여러 개 생성될 수 있다.
인덱스는 테이블의 특정 컬럼(Column) 을 기준으로 적용되어진다.
MySQL 의 인덱스 종류에는 클러스터드 인덱스(Clustered Index) 와 보조 인덱스(Secondary Index or Non-Clustered Index) 가 있다.
클러스터드 인덱스
보조 인덱스
특정 테이블에 Primary Key 가 존재하면서 UNIQUE KEY 가 존재할 경우
특정 테이블에 Primary Key 가 존재하지 않으며 특정 컬럼에 UNIQUE NOT NULL 제약이 지정될 경우