[DataBase] Index

Cjw.dev·2023년 3월 29일

DataBase

목록 보기
1/1

1. DB에서 인덱스란?

책의 색인과 같은 역할

예) 1만개의 Data -> 트랜젝션을 찾는다

트랜젝션은 5545 페이지에 있다고 가정할 때

SELECT TITLE
  FROM BOOK
 WHERE "TITLE" == "트랜잭션"

DB는 1만건을 풀스캔한다.

이때 인덱스 테이블을 만들어본다.
테이블명 : index_title
타이틀 페이지 컬럼을 만들고 중복된 내용은 해당 내용의 첫페이지만 남기고 다 지운다.

"title"    "page"
Intro       1
SQL         21
DDL         150
DML         2105
트랜잭션     5545

DB는 풀스캔할필요가 없어졌다.
인덱스 타이틀 테이블에서 5개의 데이터만 찾으면 된다.


2. 인덱스의 특징 :

1) Where 절에서 사용할 컬럼에 대한 효율화이다.

2) 인덱스는 하나 또는 여러개의 테이블에 설정할 수 있다.
여러개 할수있다 해서 검색속도를 높여주는 것은 아니다.
인덱스는 DB의 메모리를 사용해서 테이블 형태로 저장된다.
인덱스의 갯수와 저장공간은 비례하기에 무작정 많이 만드는 것은 좋지 못하다.
조회시 자주사용하고 고유한 값 위주로 인덱스를 설정하는 것이 좋다.


3. DML 각각에는 어떤 영향을 미칠까?

  • Select 쿼리에서 성능 좋음.
  • Update, delete는 where절에서 잘 설정된 인덱스로 조건을 붘여주면 조회할 때 성능은 크게 저하되지 않음.(그닥 좋지 못함)
  • Insert의 같은 경우 새로운 데이터 추가 -> 기존 인덱스 페이지에 저장되어 있던 탐색 위치가 수정되어야 하므로 효율이 낮음.

즉, 인덱스는 원하는 데이터를 빠르게 찾을 때 빛을 발한다!


4. 어떤 컬럼에 인덱스를 설정하는게 좋을까?

  • 한 테이블당 보통 3-5개가 적당
  • 인덱스는 컬럼을 정해서 설정하는 것이므로 후보컬럼들의 특징을 잘 파악해야한다

인덱스 설정의 기준 4가지

1) 카디널리티(중복수치) :
높을수록 인덱스 설정에 좋은 컬럼
중복정도가 낮을수록 카디널리티가 높음.

2) 선택도 :
낮을수록 인덱스 설정에 좋은 컬럼
데이터에서 특정값을 얼마나 잘 선택할 수 있는지에 다한 지표 (5~10%가 적당)

※ 선택도 계산 :
특정컬럼의 row수 / 테이블 총 row수 100
or
컬럼의 값들의 평균 row수 / 테이블의 총row수
100

예) 10개 rows를 가지는 학생 테이블에 학번, 이름, 성별 컬럼이 있다. 

학번은 고유하고 이름은 2명씩 같고 성별은 5:5

- 학번의 선택도는?  1/10*100 (모두 고유하므로 특정값1)
- 이름의 선택도는?  2/10*100 (2명씩 같으므로 특정값2)
- 성별의 선택도는?  5/10*100 (5명씩 같으므로 특정값5)

선택도는 특정 필드값을 지정했을 때 선택되는 레코드 수를 테이블 전체 레코드 수로 나눈 값이라 볼 수 있다.

3) 활용도 : 높을 수록 인덱스 활용에 좋은 컬럼
(해당 컬럼이 실제 작업에서 얼마나 활용되는지에 대한 값)

4) 중복도 : 중복도가 없을수록 인덱스 설중이 좋은 컬럼
(중복 인덱스 여부에 대한 값)

인덱스도 속성을 가진다.
인덱스는 테이블 형태로 생성되므로 속성을 컬럼으로 관리한다.
속성이 다를 때 같은 컬럼에 대해 중복으로 인덱스 설정이 가능하다.
인덱스도 결국 메모리의 일부이므로 필요 없는 학목은 삭제하는게 좋다.

참고 자료 : https://www.youtube.com/watch?v=wYYXjWg2I4Q

profile
백엔드 개발 공부 기록 22.11.07 ~ ing

0개의 댓글