인덱스

김기태·2021년 12월 28일
0

인덱스

장점

  • 검색속도가 무척 빨라질 수 있다 (항상X)
    해당 쿼리의 부하가 줄어서 시스템 전체 성능 향상

단점

  • 데이터베이스 공간을 차지해서 크기의 10%정도의 추가 공간이 필요

  • 처음 인덱스 생성하는데 시간이 많이 소요될 수 있다.

  • 데이터 변경 작업(Insert, Update, Delete)이 자주 일어날 경우 성능이 나빠질 수 있다.

종류

클러스터형 인덱스

  • 영어사전

  • 데이터 자체가 정렬 되어있다

  • 테이블당 한 개만 생성

  • 행 데이터를 인덱스로 지정한 열에 맞춰서 자동 정렬

비클러스터형(보조) 인덱스

  • 책 뒤에 찾아보기

  • 데이터가 정렬 되어있지 않다. 주소를 참조하고 있다.

  • 테이블당 여러개 생성가능

자동으로 생성되는 인덱스

  • 인덱스는 우선 테이블의 컬럼에 생성된다

  • 기본키 (PRIMARY KEY)를 설정하면 자동으로 클러스터형 인덱스가 생성된다. NONCLUSTERED를 주면 비클러스터형 인덱스가 된다

  • 테이블 생성 시 인덱스를 만들려면 제약조건을 사용해야 하며, 인덱스가 만들어지는 제약조건은 Primary Key 혹은 Unique

  • Unique값은 기본적으로 비클러스터형 인덱스를 생성된다. CLUSTERED를 주면 클러스터형 인덱스가 된다.

인덱스 주의점

  • 많은 데이터가 입력된 후에 Alert문으로 Unique 또는 Primary를 지정하게 되면 인덱스 구성하는데 오랜 시간이 걸릴 수 있다.

  • 업무시간에 함부로 기존에 운영되는 대량의 테이블의 인덱스를 생성하면 시스템이 느려저 심각한 상황이 일어날 수 있으므로 주의
    (데이터 하나하나를 정렬해야하기 때문)

B-Tree

  • 데이터 검색할 시 성능이 매우 우수.

  • 노드에 데이터넣을 공간이 없다면 페이지 분할이 일어나기 때문에 데이터변경(INSERT, UPDATE, DELETE)할 때 성능이 나빠진다.

클러스터 vs 비클러스터

클러스터

  • 인덱스페이지 자체에 데이터가 포함

  • 페이지 분할이 많이 일어난다

비클러스터

  • 인덱스페이지 데이터페이지가 별도로 분리
  • 데이터 위치를 리프페이지에 참조
  • 페이지 분할이 많이 덜 일어난다
profile
김개발

0개의 댓글