참조테이블 : test_table
칼럼 : age , hakbun , grade
인덱스 생성
CREATE INDEX 인덱스_이름 ON 참조테이블 ( 칼럼 )
- CREATE INDEX AGE_INDEX ON TEST_TABLE (AGE)
인덱스 삭제
ALTER TABLE 테이블_이름 DROP INDEX 인덱스_이름
- ALTER TABLE TEST_TABLE DROP INDEX AGE_INDEX
결합 인덱스 생성
CREATE INDEX 인덱스_이름 ON 참조테이블 ( 칼럼 ,칼럼 , 칼럼)
- CREATE INDEX AGE_INDEX ON TEST_TABLE (AGE ,hakbun , grade )
인덱스를 참조했는지 테스트 하는법
EXPLAIN SELECT 쿼리~~
ex) EXPLAIN SELECT * FROM STUDENT;
각 칼럼의 의미
가장 좋은 타입부터 가장 나쁜 타입은 system, const, eq-ref, ref, range, index, all 이다.
Type에 all이나 index, range 등이 보일 경우는 쿼리가 그다지 빠르지 않다는 것을 의미한다.
system : 테이블이 하나의 레코드만 가지는 경우
const : 테이블에 조건을 만족하는 레코드가 하나일 때, 상수 취급
eq_ref : 인덱스가 UNIQUE이거나 PRIMARY KEY인 경우의 조인으로 const를 제외한 조인 중 가장 좋은 형태
ref : eq_ref와 다른 점은 UNIQUE나 PRIMARY KEY가 아닐 경우 사용한다는 것.
range : 조건에 레코드의 범위가 주어진 조인.
index : all 형태와 비슷하며, 인덱스를 사용한다.
all : 모든 레코드를 스캔한다.
테이블에서 데이터형의 결정은 되도록이면 int나 smallint, medianint를 사용하는 것이 좋다).
distinct : 조건을 만족하는 레코드를 찾았을 때 같은 조건을 만족하는 또 다른 레코드가 있는지 검사하지 않음.
not exist : left join 조건을 만족하는 하나의 레코드를 찾았을 때 다른 레코드의 조합은 더 이상 검사하지 않는다.
range checked for each record : 최적의 인덱스가 없는 차선의 인덱스를 사용한다는 의미.
using filesort : mysql이 정렬을 빠르게 하기 위해 부가적인 일을 한다.
unsing index : select 할때 인덱스 파일만 사용
using temporary : 임시 테이블을 사용한다. order by 나 group by 할때 주로 사용
where used : 조건을 사용한다는 의미.
위의 각 칼럼의 의미 [출처] 최적화를 위한 분석(PROCEDURE ANALYSE, EXPLAIN SELECT) |작성자 너만을
오라클에서는 인덱스를 여러개를 생성하면 전부 사용가능하지만 mysql에선 인덱스를 하나밖에 사용하지 못한다고 합니다. 여러개의 인덱스를 한번에 사용하려면 결합인덱스를 생성하면 사용하실수 있습니다.
ex) - CREATE INDEX AGE_INDEX ON TEST_TABLE (AGE ,hakbun , grade )
SELECT * FROM TEST_TABLE WHERE AGE = '' AND HAKBUN = '' AND GRADE = ''
3개의 조건이 동일시 사용할 경우 인덱스 사용법
- EXPLAIN 시 Extra 칼럼에 Using Temporary, Using filesort 라는 값이 나타날 경우 느린 결과를 초래하기때문 피해셔야 합니다.
group by 를 사용할 경우 order by null 추가 생성으로 피할 수 있습니다.
'개발자 > Mysql' 카테고리의 다른 글
mysql db 덤프 생성하기 (0) | 2014.10.07 |
---|---|
mysql 사용자 계정 생성 및 select 권한 부여 (0) | 2014.09.25 |
mysql select insert 쿼리 (0) | 2014.07.17 |
[MySQL] Error Code: 2006 - MySQL server has gone away (0) | 2014.06.24 |
Mysql 칼럼 : 추가, 삭제, 변경 (0) | 2014.03.03 |