• Index
    • WHY?
      • 데이터베이스의 인덱스에 대해서 알아보기 전에 먼저 책에서 인덱스의 의미를 찾아보자.
        • 책을 읽을 때 맨 뒤에 인덱스(색인) 페이지가 있는 것을 보았을 것 이다. 책에서 특정 정보를 찾고 싶을 때 책의 모든 부분을 뒤져 찾아볼 수 있다. 하지만, 이는 매우 비효율적임을 직감적으로 느낄 수 있다.
        • 이럴 때, 우리는 인덱스 페이지를 사용한다. 인덱스 페이지를 들여다 보면 몇 페이지 안되는 분량에 우리가 원하는 정보가 위치한 페이지가 적혀 있는 걸 알 수 있다.
        • 예를 들어, 네트워크 관련 서적에서 TCP에 대한 정보를 찾으려면 책 페이지를 하나하나 넘겨서 확인할 수 있지만 인덱스 페이지에서 “TCP - 171page” 라고 적힌 부분을 찾게되면 한번에 찾을 수 있다.
        • 이와 같은 일련의 방법이 데이터베이스에서도 똑같이 적용된다.
      • 구구절절 설명이 길었다. 결국, 인덱스란 데이터베이스에서 우리가 원하는 정보의 위치를 빠르게 찾기 위해 사용하는 것이다.
    • Clustered Index / Non-Clustered Index
      • Clustered Index(클러스터 인덱스)
        • 데이터의 위치 정보를 담고 있는 인덱스 이다.
        • MySQL에서는 PK가 클러스터 인덱스가 되며 테이블당 하나의 클러스터 인덱스를 가진다.
        • 클러스터 인덱스는 기본적으로 정렬되어 있기 때문에 검색속도가 빠르다.
        • 클러스터 인덱스가 변경될 경우 위치 정보 또한 변하기 때문에 왠만해서는 불변하는 값을 클러스터 인덱스로 설정하는 것이 좋다. (물론, 중복되지 않는 정보여야 한다.)
      • Non-Clustered Index(넌 클러스터 인덱스)
        • 우리는 테이블에 임의의 컬럼을 인덱싱 할 수 있다. 이렇게 설정된 인덱스는 넌 클러스터 인덱스가 된다.
        • MySQL에서 이렇게 생성된 인덱스는 인덱스 테이블을 별도로 생성하며 선택한 컬럼을 정렬한 후 데이터의 위치 정보(PK인덱스)를 가지게 된다.
    • WHEN?
      • WHERE 또는 JOIN을 통해 특정 필터로 쿼리가 자주 발생하는 경우에 인덱싱을 통해 시간을 줄일 수 있다.
      • 인덱싱한 컬럼은 중복이 적을 수록 효율이 높지만 중복 데이터가 많은 컬럼(ex. 성별)은 인덱싱 효율이 떨어져 오히려 검색속도가 늦어질 수 있다. (이 부분은 인덱싱 데이터 접근에 대한 이해가 필요하다.)