책의 색인과 같은 역할
예) 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개의 데이터만 찾으면 된다.
1) Where 절에서 사용할 컬럼에 대한 효율화이다.
2) 인덱스는 하나 또는 여러개의 테이블에 설정할 수 있다.
여러개 할수있다 해서 검색속도를 높여주는 것은 아니다.
인덱스는 DB의 메모리를 사용해서 테이블 형태로 저장된다.
인덱스의 갯수와 저장공간은 비례하기에 무작정 많이 만드는 것은 좋지 못하다.
조회시 자주사용하고 고유한 값 위주로 인덱스를 설정하는 것이 좋다.
즉, 인덱스는 원하는 데이터를 빠르게 찾을 때 빛을 발한다!
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) 중복도 : 중복도가 없을수록 인덱스 설중이 좋은 컬럼
(중복 인덱스 여부에 대한 값)
인덱스도 속성을 가진다.
인덱스는 테이블 형태로 생성되므로 속성을 컬럼으로 관리한다.
속성이 다를 때 같은 컬럼에 대해 중복으로 인덱스 설정이 가능하다.
인덱스도 결국 메모리의 일부이므로 필요 없는 학목은 삭제하는게 좋다.