index 기능

·2021년 12월 20일
1

index 사용하게 된 배경..Full table scan

  • row의 값을 순차적으로 scan하며 값을 비교한다.
  • full table scan은 가장 느린 scanning 방법이며 많은 자료가 담긴 disk를 읽기 위한 I/O를 사용하며 자원을 잡는다.
  • 속도도 느리고 자원도 많이 사용하는 방법이다.
  • 이를 해결하기 위해서 database index 기능을 제공한다.

DB Index란?

  • 읽기 성능을 향상시키기 위한 일종의 자료구조이다.
  • index는 관련된 테이블과 별도로 저장되며 index로 설정한 컬럼값이 변경되거나 추가되면 index도 업데이트가 동시에 된다.
  • index에 주로 사용된느 자료구조는 b-tree 알고리즘이다.
  • primary key에는 database가 자동으로 index기능을 설정하여 관리한다.

Clustered Index

  • 물리적으로 데이터를 정리하며 index 테이블은 하나만 존재한다.
  • 데이터 페이지가 물리적으로 정렬되기 때문에 순차적 데이터를 접근할때 편리하다.

Non-Clustered Index

  • 데이터는 임의적으로 존재하지만 논리적 순서는 인덱스에 의해 지정된다.
  • 데이터 페이지가 물리적으로 정렬되어 있지 않기 때문에 인덱스에 의해 찾아간다.

MySQL index 설정하기

  • 기존 테이블에 index 추가하기
CREATE INDEX part_of_name ON customer (name(10)); 입력하세요
  • 테이블 생성 및 index 추가하기
CREATE TABLE lookup (id INT) ENGINE = MEMORY;
CREATE INDEX id_index ON lookup (id) USING BTREE;

JPA Index 설정하기

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Index;
import javax.persistence.Table;

@Entity
@Table(name = "region",
       indexes = {@Index(name = "my_index_name",  columnList="iso_code", unique = true),
                  @Index(name = "my_index_name2", columnList="name",     unique = false)})
public class Region{

    @Column(name = "iso_code", nullable = false)
    private String isoCode;

    @Column(name = "name", nullable = false)
    private String name;

}

참고)
https://en.wikipedia.org/wiki/Full_table_scan
https://en.wikipedia.org/wiki/Database_index
http://shadowxx.egloos.com/2333505
https://dev.mysql.com/doc/refman/5.7/en/create-index.html
https://technet.microsoft.com/ko-kr/library/ms177443(v=sql.105).aspx
https://stackoverflow.com/questions/3405229/specifying-an-index-non-unique-key-using-jpa
https://nesoy.github.io/articles/2017-07/DBIndex

profile
코딩하는 은행원 !

0개의 댓글