참조테이블 : 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;
각 칼럼의 의미
table 사용한 테이블. 조인일 경우는 행이 여러 개로 나온다.type 가장 중요한 것 중에 하나이며, 조인이 사용되었는지 말해준다. 가장 좋은 타입부터 가장 나쁜 타입은 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 : 모든 레코드를 스캔한다.
possible_keys 사용 가능한 키(인덱스)key 사용하고 있는 키(인덱스)key_len 키가 사용된 길이. 작을수록 좋다(int는 4바이트, char(10)은 10바이트를 차지한다. 테이블에서 데이터형의 결정은 되도록이면 int나 smallint, medianint를 사용하는 것이 좋다).
ref 칼럼이나 상수(const)가 사용되었는지 말해준다.rows 인덱스 범위를 나타낸다. 작을수록 역시 빠르다.Extra 정보- "using temporary"나 "using filesort"는 가장 좋지 않다.
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 추가 생성으로 피할 수 있습니다.