본문 바로가기

CS(Computer Science)

CS Study 5주차 : Primary Index vs Secondary Index / Composite Index

Primary Index

특징

  • 테이블당 하나만 가질 수 있다.
  • Insert시 data가 정렬되고 Index는 data block의 첫 번째 레코드의 주소값을 갖게 된다.
  • Index가 바로 data block에 접근해서 Secondary Index보다 동작이 빠른 편이다.
  • data가 정렬되어 저장되기 때문에 Secondary Index에 비해 범위로 질의를 하는 것이 유리하다.

 

아래는 범위로 검색하는 예시이다. id=101~104번의 학생을 찾는다고 하면 Index block을 scan한 후에 data block 1을 가져오고 data block 2를 가져오면 범위를 검색할 수 있다. 이렇게 되면 총 3~4번의 I/O이 발생하게 된다.

 

Secondary Index

특징

  • Primary Key 이외에 필요한 정렬 기준이 있을 경우 사용한다.
  • 테이블당 여러 개 가질 수 있다.
  • data record가 정렬되어 있지 않다.
  • Index가 data record의 모든 주소값을 가지고 있어야 한다.
  • unique 하지 않아도 된다.
  • data record가 index 순서대로 정렬되어 있지 않기 때문에 범위 조건으로 검색하게 되면 많은 I/O가 발생할 수 있다.
    대신 좋은 성능을 내기는 어렵다.
  • index는 모든 레코드에 대한 색인 데이터를 들고 있어야 정렬된다. 따라서 update, delete, insert시 오래 걸릴 수 있고, 
    primary index에 비해 더 많은 공간을 차지하게 된다.

아래는 예시이다. name이 Jane인 학생을 찾는 과정은 id=105로 Jane을 찾는 것과 비슷하다. 하지만 아스키 코드 순서대로 범위의 레코드를 가져오려면 index block1 부터 data block 4를 모두 읽어야 하기 때문에 I/O이 많이 발생하게 된다.
이처럼 범위로 데이터를 검색하는 경우는 불리하고, 모든 data의 entry에 대해 색인을 가지고 있어야 하기 때문에 많은 공간을 차지하게 된다.

 

Composite Index(결합 인덱스)

  • 결합 인데스란 인덱스를 생성할 때 두 개 이상의 컬럼을 합쳐서 인덱스를 만드는 것을 말한다.
  • 주 용도는 SQL에서 WHERE절의 조건 컬럼이 2개 이상 AND로 연결되어 함께 사용되는 경우에 많이 사용한다.
  • 결합 인덱스를 생성할 때 컬럼 순서는 매우 중요하다.
    • 첫 번째 조건에서 최대한 많은 데이터를 걸러내서 두 번째 조건을 검사하도록 해야 한다.