'MySQL'에 해당되는 글 9건
- 2013.12.09 SELECT/ EXPLAIN SELECT
SELECT/ EXPLAIN SELECT
SELECT 문법
SELECT HIGH_PRIORITY 쿼리는 테이블에 수정 쿼리(update, insert)를 주는 것보다 높은 우선권을
가지게 된다. SELECT문을 상당히 빠르게 하는 반면에, INSERT/ UPDATE 쿼리가 느려지기 때문에
주로 빠른 검색을 하는 곳에 사용한다.
EXPLAIN SELECT 문법
EXPLAIN SELECT 문은 쿼리가 어떻게 사용되고 있는지에 대한 정보를 보여준다. 주로 SELECT
문에서 느린 쿼리 분석에 사용되며, 인덱스가 정상적으로 사용되는지, 조인을 사용하는지,
퍼포먼스가 좋은지 등에 대해서 말해준다.
Table: 사용한 테이블. 조인 일 경우는 행이 여러 개로 나온다.
Type: 가장 중요한 것 중에 하나이며, 조인이 사용되었는지 말해준다. 가장 좋은 타입부터 가장
나쁜 타입은 system, const, eq_ref, ref, range, index, all이다. Type에 ALL이나 index, range
등이 보일 경우는 쿼리가 그다지 빠르지 않다는 것을 의미한다.
system: 1개 행으로만 이루어진 테이블. 행이 1개 이기 때문에 엄청 빠르다.
const: 조건에 맞는 레코드가 1개인 경우에 나타나는 유형이다. 주로 주 키일 경우나
UNIQUE 키일 경우 나타난다.
eq_ref: 조인일 경우에 1개 행이 일치하는 경우에 보여진다. 키 값이 UNIQUE나
PRIMARY KEY인 경우이다.
ref: 인덱스가 걸린 쿼리 유형이며, UNIQUE 키나 PRIMARY KEY가 아닌 인덱스일 경우이다.
range: 일정 범위 값에 대해서 쿼리를 할 때 나오는 유형이다.
index: 테이블 전체를 읽어야 하지만, 인덱스를 사용하는 경우이다.
ALL타입이나 마찬가지이다.
ALL: 테이블 전체를 검색한다. 가장 좋지 않은 쿼리 상태이다.
Possible_keys: 사용 가능한 키(인덱스)
Key: 사용하고 있는 키(인덱스)
Key_len: 키에 사용된 길이. 작을수록 좋다. int는 4바이트, char(10)은 10바이트를 차지한다.
테이블에서 데이터형의 결정은 되도록이면 int나 smallint, mediumint를 사용하는 것이
좋다.)
ref: 칼럼이나 상수가 사용되었는지 말해 준다.
rows: 인덱스 범위를 나타낸다. 작을수록 역시 빠르다.
Extra: 정보 – “using temporary”나 “using filesort:는 가장 좋지 않다.