인덱스에 대한 기본 지식

꾸준하게 20년·2023년 4월 21일
0

DB 기본

목록 보기
2/2

이 글을 보신다면 부족하거나 잘못된 부분이 있으면 조언을 부탁드립니다. ^^

인덱스를 사용하는 이유는?

  • 테이블을 조회 하는 것은 쉽게 할 수 있는 일이다. 하지만 데이터가 많아 질 수록 어렵게 변한다. 어려운 일을 쉽게 하려면 예측을 통해 계획을 잘 세워야 한다. 만약 조회 속도가 느려질 가능성이 있다면 일반적으로 인덱스를 생성하여 사용함으로써 조회 속도에 대한 이슈를 대비 할 수 있다.

인덱스 생성에 필요한 컬럼 선택 기준은?

  • 인덱스 생성에 사용되는 컬럼의 선택기준 1순위는 where 절에서 조건으로 사용되는 컬럼이며 값이 자주 변경되는 컬럼은 인덱스 정보를 갱신하는 과정이 추가적으로 발생하기 때문에 좋치 않다.

  • 컬럼에 중복된 데이터가 많을 경우에도 인덱스를 사용함으로써 얻는 이점이 적다.

인덱스 생성 기준은?

  • 인덱스는 여러 컬럼을 선택하여 생성 할 수 있는데 컬럼의 순서에 따라 검색 속도에 영향을 준다.

  • where 절에서 조건으로 사용되는 컬럼은 인덱스 생성 시 앞쪽에 배치 하는 것이 좋다. 이유는 인덱스를 검색 할때 해당 조건값을 이용하여 검색의 범위를 줄 일수 있기 때문이다. 인덱스 생성은 일반적으로 B-tree 방식이 사용되며 다른 방식을 지정 할 수도 있다.

  • 인덱스 생성에 사용되는 컬럼의 데이터가 문자열인 경우 대소문자를 구분 하지 않도록 지정 하면 속도 향상에 도움이 된다.

인덱스 생성 할 때 주의할 점은?

  • 인덱스는 생성/삭제 시 대상 테이블에 락(Lock)이 걸리기 때문에 운영 환경에서 해당 작업을 해야 한다면 영향도를 검토해야 한다.

인덱스를 잘 관리하려면?

  • 인덱스의 크기를 계산 : 정확한 공식은 아니지만 대략적으로 (컬럼의 데이터 타입 * 데이터의 건수)로 생각하면 좀 쉽게 이해 할 수 있다. 그래서 불필요한 인덱스는 생성 하지 않도록 한다.

  • 인덱스 파티셔닝 : 대용량 데이터에 대한 인덱스 생성시 파티셔닝을 고려해 볼 수 있다. 파티셔닝의 경우 읽기 속도는 빨라지지만 쓰기 성능은 저하 될 수 있다. 예를 들어 파티션으로 구역이 정해지면 쓰기 작업을 할때 어느 구역에 쓸 것인지 찾는 과정으로 인해 오버헤드가 발생 한다.

  • 인덱스 재구성 : 생성한 인덱스에 대하여 주기적으로 재구성(정렬)을 해주면 속도 향상에 도움이 된다. 재구성의 예시는 B-tree 구조로 저장된 인덱스 값을 정렬하는 것이다. 그리고 재구성 할때는 테이블에 락(Lock)이 걸리지 않도록 하는 옵션이 있는지 확인해 봐야 한다.

  • 인덱스 통계정보 : DBMS 시스템에서는 인덱스의 통계 정보를 관리하는데 쿼리의 실행 계획을 짤때 통계 정보를 이용한다. 일반적으로 DBA가 성능 튜닝을 목적으로 조작 한다.

profile
앞으로 1년

0개의 댓글