1. Index란
테이블의 저장된 데이터를 빠르게 조회하기 위한 데이터베이스 객체이다.
테이블생성, 수정, 삭제 할때 데이터 레코드는 순서없이 저장되며, 저장되는 영역을 Heap이라고 한다.
Heap에서는 인덱스가 없는 테이블을 찾을 때 전체 데이터 페이지를 처음부터 끝까지 다 읽어서 검색하게 된다.
Table scan, Full Scan이라고 하며, 전체를 비교하여 찾기때문에 처리속도가 떨어진다. 인덱스는 풀스캔하지 않고 빠르게 검색 할 수 있도록 하기위해 사용한다.
2. Index 생성 주의사항
인덱스 생성 컬럼은 where절, order by 등 사용빈도가 높고 키 값의 선별이 좋은 컬럼에 사용하는것이 좋다.
빈도가 낮고 T/F, M/F, 테이블이 작거나 자주 갱신될 때에도 인덱스를 사용하지 않는것이 더 좋다.
3. 활용방법
where 절에서 사용하는 컬럼들
like '%A%' (X) -> 'A%' (0) 전자의 조건은 FullScan으로 처리됨
between A and B 클러스티드 인덱스에서 유리
order by에 사용되는 컬럼
join으로 사용되는 컬럼
Foreign Key (1:1)이 많은 경우
Foreign Key (1:N)이 많은 경우 클러스티드 인덱스 유리
100만건중 10건의 데이터 조회 찾는건이 적은 컬럼에 인덱스 설정
- 중복은 많은 컬럼은 인덱스를 피하는게 좋음
- 조회되는 건 수가 많으면 Full Scan이 더 좋음
not 연산자를 긍정문으로 변경
insert, delete 등 데이터의 변경이 많은 컬럼은 인덱스 걸지 않는것이 좋음
- 저장공간에 대하여 인덱스를 다시 조정해줘야 하기 때문에 자원소모가 많음
결합 인덱스의 경우 중복도가 낮은순에서 높은순으로 생성해야 성능 향상
4. Index 종류
- 클러스티드 인덱스
클러스티드 인덱스는 물리적으로 행을 재배열 하는 특징이 있다.
넌 클러스티드 인덱스보다 페이지 용량이 작다.
선택도 30% 이내에서 사용해야 좋다.
테이블당 1개만 사용할 수 있다.
- 논 클러스터 인덱스
물리적으로 재배열하지 않는다.
클러스터 인덱스보다 용량이 크다 (참조하는 인덱스 페이지가 따로존재)
선택도 3%이내에서 사용해야 좋다
테이블당 249개(여러개)
5. 인덱스의 종류
1. Primary Key : Key중복이 될 수 없으며 1:1매칭이 되어야하는 키. 정수형 필드나 auto_increment를 함께 사용
2. Unique Index : 값이 중복될 수 없으나, null은 가질 수 있는 인덱스.
3. FULLTEXT : 일반적인 인덱스와는 다르게 모든 텍스트 필드를 검색함.
6. 인덱스 생성방법
* 추가 방법
1. CREATE INDEX <인덱스명> ON <테이블명> (컬럼명1, 컬럼명2, ...);
2. ALTER TABLE <테이블명> ADD index <인덱스명> (컬럼명1, 컬럼명2, ....);
3. ALTER TABLE <테이블명> ADD INDEX(컬럼명(자료형사이즈));
= ALTER TABLE TableName ADD INDEX(ColName(ColSize));
* 테이블 생성시 만들기
스키마 생성문 뒤에...
INDEX <인덱스명> ( 컬럼명1, 컬럼명2 )
UNIQUE INDEX <인덱스명> ( 컬럼명 ) <-- 필수
*인덱스 보기
show index from <테이블명>;
*인덱스 삭제
ALTER TABLE <테이블명> DROP INDEX <인덱스명>;
'개인공부' 카테고리의 다른 글
소프트웨어(프로젝트) 개발 방법론 (0) | 2019.06.07 |
---|---|
암호화 대칭 비대칭 차이 (0) | 2019.05.31 |
1. SSO(Single Sign On), SLO(Sign LogOn) 란 무엇인가 (0) | 2019.05.24 |
[Oracle] select 내 문자열 추가하여 조회하는 방법 (0) | 2019.01.03 |
파이썬의 활용 (0) | 2018.01.26 |