[SQL] 06-1 인덱스 개념을 파악하자

김민서·2024년 7월 23일

혼자 공부하는 SQL

목록 보기
14/19

기본 개념

  1. 클러스터형 인덱스
    1) 기본 키로 지정하면 자동 생성되며, 테이블에 1개만 만들 수 있음.
    2) 기본 키로 지정한 열을 기준으로 자동 정렬됨.

  2. 보조 인덱스
    1) 고유 키로 지정하면 자동 생성되며 여러 개를 만들 수 있음.
    2) 자동 정렬되지 않음.

인덱스의 개념

인덱스의 문제점

  1. 필요 없는 인덱스를 만들 경우, 데이터베이스가 차지하는 공간만 늘어나고, 인덱스를 이용해서 데이터를 찾는 것이 전체 테이블을 찾아보는 것보다 느려짐.

인덱스의 장점

  1. SELECT 문으로 검색하는 속도가 매우 빨라짐.
  2. 그 결과 컴퓨터의 부담이 줄어들어서 결국 전체 시스템의 성능이 향상됨.

인덱스의 단점

  1. 인덱스도 공간을 차지해서 데이터베이스 안에 추가적인 공간이 필요함.
  2. 처음에 인덱스를 만드는 데 시간이 오래 걸릴 수 있음.
  3. SELECT가 아닌 데이터의 변경 작업(INSERT, UPDATE, DELETE)이 자주 일어나면 오히려 성능이 나빠질 수 있음.

인덱스의 종류

  1. MySQL에서 사용되는 인덱스의 종류는 크게 두 가지임.
    1) 클러스터형 인덱스: 영어사전과 비슷한 느낌 -> 책의 내용이 이미 알파벳 순서대로 정렬되있는 것
    2) 보조 인덱스: 책의 뒤에 찾아보기가 있는 일반적인 책과 비슷한 느낌

자동으로 생성되는 인덱스

  1. 간단한 테이블을 만들고, 첫 번째 열을 기본 키로 지정하기

  2. 테이블의 인덱스 확인하기
    1) SHOW INDEX 문을 사용하면, 인덱스 정보가 확인됨.

    2) Key_name 부분을 보면, PRIMARY라고 써있음. 이는 기본 키로 설정해서 자동으로 생성된 인덱스라는 의미임.
    3) 이것이 클러스터형 인덱스임.
    4) Column_name이 col1로 설정되어 있다는 것은 col1 열에 인덱스가 만들어져 있다는 의미임.
    5) Non-Unique는 고유하지 않다는 의미임. 즉, 그 값이 0이라는 것은 false(중복이 허용되지 않음.)이고, 1은 true(중복이 허용됨)이라는 의미임.

  3. 두 번째 열과 세 번째 열을 UNIQUE로 지정하기
    1) Key_name에 열 이름이 써 있는 것은 보조 인덱스라고 보면 됨.

자동으로 정렬되는 클러스터형 인덱스

  1. 간단한 실습을 위해 회원 테이블의 열을 몇 개 만들기
    1) 기본 키는 없는 상태임.

  2. 데이터 몇 건 입력하기

  3. 아이디를 기준으로 정렬 순서가 바뀐 것을 확인할 수 있음.
    1) mem_id 열을 기본 키로 지정했으므로 mem_id 열에 클러스터형 인덱스가 생성되어 mem_id 열을 기준으로 정렬됨.

  4. mem_id 열의 Primary key를 제거하고, mem_name 열을 Primary key로 지정하기
    1) mem_name 열에 클러스터형 인덱스가 생성됨에 따라 mem_name 열을 기준으로 다시 정렬됨.

  5. 지금부터는 추가로 데이터를 입력하면 알아서 기준에 맞춰 정렬됨.

정렬되지 않는 보조 인덱스

  1. 실습을 위해 회원 테이블의 열을 고유 키 없이 몇 개만 만들기

  2. 데이터 몇 건 입력하기

  3. mem_id 열을 고유 키로 설정하고 내용 확인하기

    1) 보조 인덱스를 생성해도 데이터의 내용이나 순서는 변경되지 않음.

  4. mem_name 열에 추가로 고유 키 지정하기

    1) mem_id 열과 mem_name 열에 모두 보조 인덱스가 생성된 상태

  5. 데이터 추가로 입력하기

  6. 보조 인덱스는 여러 개 만들 수 있음. 그러나, 보조 인덱스를 만들 때마다 데이터베이스의 공간을 차지하게 되고, 전반적으로 시스템에 오히려 나쁜 영향을 미치게 됨.

0개의 댓글