728x90
INDEX
- 레코드 검색 기준: 책 목차 개념
- PK 컬럼에는 자동으로 인덱스 객체 생성
- 검색 속도 빠름
- CUD: 레코드 추가, 변경, 삭제 속도 저하
- where 조건절에 많이 사용하는 컬럼에 인덱스 추가
인덱스 선정 기준
- 분포도가 좋은 컬럼
- 자주 조합되어 사용되는 컬럼들
- 수정이 빈번하지 않은 컬럼
- Foreign Key로 사용되는 컬럼
- MIN 또는 MAX 값을 자주 구하는 컬럼
- 정렬 기준으로 자주 사용되는 컬럼
예제
예제와 함께 SQL 쿼리들을 쭉 실행해보는 느낌으로다가 ㄱㄱ
-- 테이블 생성된 인덱스 조회
show index from employees;
-- 테이블 생성된 인덱스 조회
show index from departments;
-- 인덱스 타는지 확인: 안탐 -> type은 all(full scan), possible_keys(인덱스 탈 수 있는 키들)는 아무것도 안나옴, key(인덱스 탄 키들)
explain
select * from employees;
-- 1. 인덱스 타는지 확인: 인덱스 사용됨 -> type은 const나 range?(여기서는 const), possible_keys는 뭐시기뭐시기가 나옴, key(인덱스 탄 키들)
explain
select * from employees where employee_id=100;
-- 2. 인덱스 타는지 확인: 인덱스 사용됨 -> type은 index_merge, possible_keys는 뭐시기뭐시기가 나옴, key(인덱스 탄 키들)
explain
select * from employees where employee_id=100 or last_name='Cambrault';
-- 3. 인덱스 타는지 확인: 인덱스 사용됨 -> type은 all 나옴(full scan), possible_keys는 뭐시기뭐시기가 나옴, key(인덱스 탄 키들)
explain
select * from employees where employee_id=100 or last_name='Cambrault' or first_name='Gerald';
-- 4. 인덱스 타는지 확인: 인덱스 사용됨 -> type은 index_merge, possible_keys는 뭐시기뭐시기가 나옴, key(인덱스 탄 키들)
explain
select * from employees where employee_id=100 or (last_name='Cambrault' and first_name='Gerald');
-- 5.
explain
select * from employees where job_id='SA_REP' AND salary between 5000 and 10000;
정리
- 이런 식으로 explain을 쓰면 인덱스와 그 외의 정보들을 알 수 있음!!
- 무조건 인덱스를 탄다고 좋은게 아님!!! 검색에만 좋은거임!
728x90