인덱스를 활용한 SQL 튜닝

이하루·2024년 12월 23일

인덱스란?

데이터를 빨리 찾기 위해 특정 컬럼을 기준으로 미리 정렬해놓은 표

인덱스와 PK의 관계

PK = 인덱스, 각 테이블별 PK에는 인덱스가 기본적으로 적용되며, PK의 변동이 있더라도 각 테이블별 PK를 기준으로 데이터가 자동 정렬 된다.

클러스터링 인덱스란?

원본 데이터 자체가 정렬되는 인덱스(PK라고 생각하면 된다)

인덱스와 UNIQUE의 관계

UNIQUE 옵션을 사용하면 해당 칼럼에 인덱스가 함께 생성된다.

인덱스를 많이 추가하면?

여러 인덱스를 추가하면 조회 속도는 빨라질 수 있으나, 추가/수정/삭제와 같은 데이터의 변경 처리에 있어서는 속도가 상대적으로 느려지게 된다. (인덱스 테이블에도 데이터를 추가해주어야 하기 떄문)

멀티 컬럼 인덱스?

두개 이상의 컬럼을 묶어서 설정하는 인덱스
ex) A, B, C라는 컬럼이 있는 테이블에서 A,B의 컬럼에 멀티 컬럼 인덱스를 생성하면 A순으로 정렬 -> B순으로 정렬이 된 인덱스가 생성됨

멀티 컬럼 인덱스 생성 시, 주의점

  1. A, B 컬럼을 대상으로 멀티 컬럼 인덱스를 만들었을 경우, 해당 인덱스가 A 컬럼만의 인덱스로도 활용이 가능하지만, B 컬럼의 인덱스의 역할은 수행하지 못한다.
  2. 중복도가 낮은 컬럼을 앞쪽에 배치하게끔 생성하는 것이 중요하다. (이름, 학과로 예를 들면, 학과보다 이름의 중복도가 대체로 낮기에 이름, 학과 순으로 멀티 컬럼 인덱스를 생성하는 것이 좋다)

커버링 인덱스?

SQL문을 실행시킬 때, 필요한 모든 컬럼을 가지고 있는 인덱스
ex) 유저테이블의 ID, 유저명, 성별이 있을 경우, 유저명에 해당하는 인덱스가 있을 떄, select ID, 유저명 from 유저 를 실행시킴에 있어서 유저명에 해당하는 인덱스는 커버링 인덱스가 된다.

profile
어제보다 더 나은 하루

0개의 댓글