출처(source) 및 참조


Index의 적용

우선 인덱스가 데이터베이스의 테이블에 어떻게 적용되는지 정말 가볍게 살펴보자.
인덱스는 테이블의 열. 즉, 컬럼(Column) 단위로 생성된다.
이 때 컬럼은 하나일 수도 있고 2개 이상일 수도 있다.


Index 의 종류

MySQL 의 Index 는 클러스터드 인덱스(Clustered Index) 와 논클러스터드 인덱스(Non-Clustered Index) 또는 세컨더리 인덱스(Secondary Index) 라고 하는 보조 인덱스가 존재한다.

먼저 이 둘을 책과 비유하자면 클러스터드 인덱스의 경우 '영어 사전'과 같은 책이고, 보조 인덱스의 경우 책의 맨 뒷장에 '찾아보기' 가 존재하는 일반적인 책과 같다.


Clustered Index

앞서 클러스터드 인덱스는 '영어 사전' 과 같다고 표현했다.
영어사전은 일반적인 책과 같이 '찾아보기' 페이지가 존재하지 않는다.
다만 목차가 존재하며 목차는 A~Z 까지 단어가 순서대로 정렬되어 있어 목차가 곧 해당 단어를 나타내게 되는데 즉, 목차 자체가 책의 내용과 같다는 것이다. => 내용 자체가 인덱스이다.

클러스터드 인덱스는 이와 같이 동작한다.
데이터베이스 테이블의 데이터(행 데이터)는 클러스터드 인덱스를 기준으로 자동 정렬되어진다는 것이다. (MySQL 의 경우 오름 차순 정렬이 되어짐.)
그리고 클러스터드 인덱스는 테이블당 1개만 생성할 수 있으며 중복된 값을 가질 수 없다.
앞선 특징들로 미루어볼 때 바로 Primary Key(PK) 가 떠오르는 사람들이 있을 수도 있을 것 같다.
맞다! 우리가 테이블의 특정 컬럼에 PK 를 생성하는 순간 자동으로 해당 컬럼에 클러스터드 인덱스가 생성된다.
즉, "특정 컬럼을 PK 로 지정한다." 라는 것은 곧 "해당 컬럼에 클러스터드 인덱스가 생성된다." 라는 것으로 기억할 수 있다.


Non-Clustered Index(Secondary Index)

보조 인덱스는 일반적인 책의 '찾아보기' 페이지와 같다고 표현했다.
이게 무슨 말이냐면 우리가 원하는 정보를 검색하기 위해 '찾아보기' 페이지를 살펴본 후에 해당 정보 옆에 표시된 페이지로 다시 이동해야 원하는 정보를 찾아낼 수 있다는 것이다.
보조 인덱스는 이와 같이 동작하게 된다.
그리고 '찾아보기' 페이지에는 많은 종류의 정보가 표시돼있는데 이와 같이 보조 인덱스는 여러 개 생성될 수 있다.


정리

  • 인덱스는 테이블의 특정 컬럼(Column) 을 기준으로 적용되어진다.

  • MySQL 의 인덱스 종류에는 클러스터드 인덱스(Clustered Index) 와 보조 인덱스(Secondary Index or Non-Clustered Index) 가 있다.

  • 클러스터드 인덱스

    • 클러스터드 인덱스는 '영어 사전'과 같다.
    • 목차 자체가 사전의 내용과 같다는 것이며, 반대로 사전의 내용 자체가 인덱스가 되어진다는 것이다.
    • 테이블의 데이터는 클러스터드 인덱스를 기준으로 자동 정렬되는데 MySQL 의 경우 오름 차순 정렬이 이루어진다.
    • 클러스터드 인덱스는 테이블당 1개만 생성할 수 있다.
    • 클러스터드 인덱스로 지정된 컬럼은 중복된 값을 가질 수 없다.
    • "테이블의 특정 컬럼을 Primary Key 로 지정한다."라는 것은 "해당 컬럼에 클러스터드 인덱스가 생성된다."라는 것으로 기억할 수 있다.
  • 보조 인덱스

    • 일반적인 책의 '찾아보기' 페이지와 같다.
    • 한 테이블에 여러 개의 보조 인덱스를 생성할 수 있다.

참고

  • 특정 테이블에 Primary Key 가 존재하면서 UNIQUE KEY 가 존재할 경우

    • Primary Key 로 지정된 컬럼은 클러스터드 인덱스가 된다.
    • Unique Key 로 지정된 컬럼들은 보조 인덱스가 된다.
    • Unique Key 로 지정된 컬럼이 NULL 을 허용하던 허용하지 않던 상관없이 모두 보조 인덱스가 된다.
  • 특정 테이블에 Primary Key 가 존재하지 않으며 특정 컬럼에 UNIQUE NOT NULL 제약이 지정될 경우

    • 해당 컬럼은 클러스터드 인덱스가 된다.
    • NOT NULL 조건이 없다면 보조 인덱스가 된다.
profile
보다나은 내일을 위한

0개의 댓글