[DB] 인덱스(Index)란?

Loopy·2021년 7월 30일
2

Database

목록 보기
1/3
post-thumbnail

🧐 개념

인덱스란, DB 내 저장된 데이터의 "주소"를 갖고 있는 것

대용량 데이터를 담고 있는 DB 테이블에서 필요한 데이터를 빨리 찾으려면 이 인덱스가 필요하다. 인덱스는 DB 데이터 조회 성능 향상을 위해 사용한다.

만약 인덱스가 없으면 특정한 값을 찾기 위해 모든 데이터 페이지를 확인하는 TABLE SCAN이 발생한다.

TABLE SCAN : 테이블에 읽는 모든 레코드를 순차적으로 읽는 것

인덱스는 위 그림처럼 테이블 내의 1개 혹은 여러 개의 컬럼을 Key로 삼고 Key에 해당하는 OID(레코드의 물리적 주소 값)가 저장되어 있다.

테이블의 다른 세부 항목들은 갖고 있지 않기 때문에, 보통의 테이블을 저장하는 데 필요한 디스크 공간보다 작은 디스크 공간을 필요로 한다.

따라서 인덱스를 설계할 때는 테이블과 논리적, 물리적으로 독립되게 설계하도록 한다.


😈 장점과 단점

장점

  • 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.

  • 전반적인 시스템의 부하를 줄일 수 있다.

단점

  • 인덱스를 관리하기 위해 DB의 추가 저장 공간이 필요하다.

  • 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.

    	인덱스는 데이터 조회(SELECT)를 제외한 모든 동작
    
    	즉, INSERT / UPDATE / DELETE의 성능에 영향을 미친다.
    
    	위 세 가지 동작은 데이터를 삽입하고 수정하고 삭제하는데,
    
    	그러한 행위들로 인해 인덱스를 걸어둔 컬럼의 데이터가 바뀌면
    
    	인덱스 테이블의 수정도 필요하기 때문에
    
    	데이터의 삽입 / 수정 / 삭제 작업의 두 번 이루어지게 되는 것이다.
  • 인덱스를 관리하기 위한 추가 작업이 필요하다.

장점보다 단점이 많은 것 같지만 RDBMS(관계형 데이터베이스 관리 시스템)에서 인덱스의 사용은 필수다. 일반적인 OLTP(온라인 트랜잭션 처리) 시스템에서 데이터 조회 업무가 90% 이상이기 때문이다.


🙆‍ 인덱스를 사용하면 좋은 경우

테이블 선정 기준

1) 규모가 작지 않은 테이블

2) 랜덤 엑세스가 빈번하거나 특정 범위, 특정 순서로 데이터 조회가 필요한 테이블

3) 다른 테이블과 순차적 조인이 발생되는 테이블

컬럼 선정 기준

1) 인덱스 컬럼의 분포도가 10~15% 이내인 컬럼

분포도 = (컬럼값의 평균 Row 수 / 테이블의 총 Row 수) x 100

2) INSERT, UPDATE, DELETE 등 가능한 수정이 빈번하지 않은 컬럼

3) WHERE, JOIN, ORDER BY, GROUP BY, UNION이 빈번한 컬럼

4) 데이터의 중복도가 낮은 컬럼


🙏 참고 자료

https://siahn95.tistory.com/77
https://mangkyu.tistory.com/96

profile
공부 쫌 해!!!😂

0개의 댓글