공부기록

인덱스 본문

CS/DB

인덱스

코타쿠 2021. 4. 30. 21:17
  • 인덱스
    • 인덱스는 데이터 레코드를 빠르게 접근하기위해 <key : pointer> 쌍으로 구성되는 데이터 구조이다.
    • 인덱스는 데이터가 저장된 물리적 구조와 밀접한 관련이 있다.
    • 인덱스는 레코드가 저장된 물리적 구조에 접근하는 방법을 제공
    • 레코드의 삽입과 삭제가 수시로 일어나는 경우, 인덱스의 갯수를 최소로 하는 것이 효율적이다.
    • 인덱스가 없으면 특정한 값을 찾기 위해 모든 데이터 페이지를 확인하는 TABLE SCAN이 발생한다.
      • Table Scan
        • 테이블에 있는 모든 레코드를 순차적으로 읽는 것
    • 기본키를 위한 기본 인덱스, 기본 인덱스가 아닌 인덱스를 보조 인덱스라고 한다.
      • 대부분의 상용 DBMS에선 기본 키에 대해 자동적으로 기본 인덱스를 생성
  • 클러스터드 인덱스 / 넌클러스터드 인덱스
    • 클러스터드 인덱스
      • 인덱스 키의 순서에 따라 데이터가 정렬되어 저장되는 방식
      • 실제 데이터가 순서대로 저장되어 있어 인덱스를 검색하지 않아도 데이터를 빠르게 찾을 수 있다.
      • 데이터 삽입, 삭제 발생시 순서를 유지하기 위해 데이터를 재정렬 해야한다.
      • 한 개의 관계에 한 개의 인덱스만 생성이 가능
    • 넌클러스터드 인덱스
      • 인덱스의 키 값만 정렬되어 있을 뿐 실제 데이터는 정렬되지 않는 방식
      • 데이터를 검색하기 위해 인덱스를 검색하여 실제 위치를 확인해야함, 클러스터 인덱스보다 검색 속도가 떨어짐
      • 한 개의 릴레이션에 여러 개의 인덱스를 만들 수 있다.
  • B+ 트리 인덱스
    • 인덱스를 저장하는 블록들이 트리 구조를 이룸
    • 상용 DBMS에선 B+ 트리 인덱스를 주로 사용
    • 단말 노드가 아닌 인덱스 세트와 단말 노드인 순차세트로 구분
    • 인덱스 세트의 노드들은 단말 노드에 있는 키 값만 찾아갈 수 있도록 제공
    • 순차 세트의 단말 노드들이 해당 데이터 레코드의 주소를 가리킴
    • 인덱스 세트에 있는 모든 키 값들이 단말 노드에 다시 나타나므로 단말 노드만 이용한 순차 처리가 가능

https://ko.wikipedia.org/wiki/B%2B_%ED%8A%B8%EB%A6%AC

  • 인덱스 대상 테이블 선정 기준
    • 테이블의 크기가 Multi Block Read 수 이상일 경우 인덱스가 필요
      • multi block read란 테이블 엑세스 시 메모리에 한 번에 읽어 들일 수 있는 블록의 수를 말한다.
    • 랜덤 엑세스가 빈번한 테이블
    • 특정 범위나 특정 순서로 데이터 조회가 필요한 테이블
    • 다른 테이블과 순차적 조인이 발생되는 테이블
  • 인덱스 대상 컬럼 선정 기준
    • 인덱스 컬럼의 분포도가 10~15% 이내인 컬럼
      • 분포도 = (컬럼값의 평균 row 수 / 테이블의 총 row 수) * 100
    • 분포도가 10~15% 이상이어도 부분 처리를 목적으로 하는 칼럼
    • 입출력 장표 등에서 조회 및 출력조건으로 사용되는 칼럼
    • 인덱스가 자동 생성되는 기본키와 Unique키 제약 조건을 사용한 칼럼
    • 가능한 한 수정이 빈번하지 않은 칼럼
    • 분포도가 좁은 칼럼은 단독 인덱스로 생성
    • ORDER BY, GROUP BY, UNION이 빈번한 칼럼
    • 인덱스들이 자주 조합되어 사용되는 경우 하나의 결합 인덱스로 생성
  • INDEX SQL
    • 인덱스 생성 
      • create [unique] index 인덱스명
      • on 테이블 명(속성명 [asc | desc] [, 속성명[asc|desc]])
      • [cluster]
    • 인덱스 사용
      • select (attributes) from (index_name) where (predicates)
    • 인덱스 삭제
      • drop index (index name);
더보기

인덱스?
  인덱스는 저장공간을 따로 할당하여 정보를 빠르게 검색할 수 있도록 하는 자료구조를 말한다.
  인덱스는 create할 때 새로 항목을 추가하고 
update할 때 기존 항목을 사용안함 처리하고 새롭게 항목을 추가하고
delete할때 해당 항목을 사용안함 처리한다.
따라서 create, update, delete가 잘 일어나지 않는 칼럼에 적합하다.
또한 group by, order by가 자주 일어나는 칼럼에 적합하다.
데이터 중복도가 낮은 칼럼에 적합하다.
규모가 큰 테이블에 적합하다.
자료구조는 b+ 트리를 사용한다.
create index my_index on table(column1, column2)
select * from my_index where (predicates)
drop index my_index;

  • 출처

https://mangkyu.tistory.com/96

'CS > DB' 카테고리의 다른 글

무결성  (0) 2021.05.01
View  (0) 2021.05.01
트랜잭션  (0) 2021.04.30
DML SQL  (0) 2021.04.30
DDL SQL  (0) 2021.04.30