• 인덱스란?

    • 데이터를 빠르게 찾을 수 있도록 도와주는 도구

    스크린샷 2023-01-13 오후 12.10.08.png

    • 책 뒷부분의 ‘찾아보기’. 찾고자 하는 단어를 책의 본문 처음부터 찾지 않고 찾아보기에서 빠르게 찾아서 본문의 페이지 번호로 이동

    스크린샷 2023-01-13 오전 12.09.22.png

    select * from member where mem_name = ‘여자친구’;
    
    • 인덱스가 없다면 여자친구 데이터(행)을 찾을 때 mem_name 열의 제일 처음 (에이핑크) 부터 순차적으로 찾기 시작해서 열번 째가 되서야 원하는 데이터를 찾을 수 있습니다.
    • 인덱스를 붙이면 균형 트리(balanced tree) 노드가 생성되어 빠른 탐색이 가능합니다. 열번 데이터를 읽어서 찾던 것을 2, 3번만에 찾습니다.
    • 인덱스는 각 열에 붙일 수 있습니다.
  • 인덱스의 장점과 단점

    • SELECT 문으로 검색하는 속도가 매우 빨라집니다.
    • 인덱스도 공간을 차지해서 데이터베이스 안에 추가적인 공간이 필요합니다.
    • 데이터 변경 작업(INSERT, UPDATE, DELETE) 가 자주 일어나면 오히려 성능이 나빠질 수 있습니다.
  • 인덱스의 종류

    • 자동으로 생성되는 인덱스

      • 클러스터형 인덱스: 어떤 열을 기본 키(Primary key)로 설정하면 자동으로 클러스터형 인덱스가 생성됩니다. 데이터가 정렬 되어 있음. 영어사전
      • 보조 인덱스: 어떤 열을 고유키(Unique)로 설정하면 자동으로 보조 인덱스가 생성됩니다. 데이터 정렬은 하지 않음. 책 뒷부분의 색인
    • 사용자가 직접 생성하는 인덱스

      • 사용자가 생성하는 인덱스도 보조 인덱스 입니다.
      • 인덱스 생성
      CREATE [UNIQUE] INDEX 인덱스_이름
      	ON 테이블_이름 (열_이름) [ASC | DESC];
      
      • 인덱스 확인
      SHOW INDEX 테이블_이름;
      
      • 인덱스의 적용
      ANALYZE TABLE 테이블_이름;
      
      • 인덱스 제거
      DROP INDEX 인덱스_이름 ON 테이블_이름;
      

      <aside> 💡 자동으로 생성된 인덱스는 위 명령으로 제거할 수 없습니다. 테이블 구조를 변경하는 ALTER TABLE 문으로 기본키나 고유키를 제거하면 자동으로 인덱스도 제거할 수 있습니다.

      </aside>

  • 인덱스를 효과적으로 사용하는 방법

    • WHERE 절에서 사용되는 열에 인덱스를 만들어야합니다.
    • 데이터 변경 작업보다 SELECT 문을 훨씬 자주 쓰는 열에 인덱스를 만들어야 합니다.
    • 데이터의 중복이 높은 열은 인덱스를 만들어도 별 효과가 없습니다.
    • 사용하지 않는 인덱스는 제거합니다.
  • 시연 SQL

    sql_index.zip