EXPLAIN ๋ช ๋ น๋ฌธ์ MySQL์ด SELECT ๋ช ๋ น๋ฌธ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํ ์๋จ์ด๋ค.
EXPLAIN ํ ์ด๋ธ๋ช ์ DESCRIBE ํ ์ด๋ธ๋ช ๋๋ SHOW COLUMS FROM ํ ์ด๋ธ๋ช ๊ณผ ๊ฐ์ ์๋ฏธ์ด๋ค.
EXPLAIN์ SELECT ๋ช ๋ น๋ฌธ์์ ์ฌ์ฉ๋ ๊ฐ ํ ์ด๋ธ ์ ๋ณด๋ฅผ ๋ฆฌํดํ๋๋ฐ MySQL์ด ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ ์ฝ์ ์ ์๋๋ก ๊ฒฐ๊ณผ๋ฌผ ์์ ํ ์ด๋ธ๋ค์ด ๋ชฉ๋ก์ผ๋ก ์ ๋ฆฌ ๋๋ค.
EXTENDED ํค์๋๊ฐ ์ฌ์ฉ๋๋ฉด, EXPLAIN์ EXPLAIN ๋ช ๋ น๋ฌธ ๋ค์์ SHOW WARNINGS ๋ช ๋ น๋ฌธ์ ์ ๋ ฅํด์ ๋ณผ ์ ์๋ ๊ธฐํ ์ ๋ณด๋ฅผ ๋ฆฌํดํ๋ค. ์ด ์ ๋ณด๋ ์ตํฐ๋ง์ด์ ๊ฐ SELECT ๋ช ๋ น๋ฌธ์ ์๋ ์ปฌ๋ผ ์ด๋ฆ๊ณผ ํ ์ด๋ธ์ ์ผ๋ง๋ ๋ง์ด ๊ฒ์ฆ์ ํ์๋์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ฉฐ, SELECT๋ ์ต์ ํ ๊ณผ์ ์ ๊ดํ ์ดํ๋ฆฌ์ผ์ด์ ์ฌ ์์ฑ๊ณผ ์ต์ ํ ๊ท์น, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๊ฐ๋ฅํ ๋ ธํธ(notes)๋ฅผ ๋ณด์ฌ์ค๋ค.
์ฌ์ฉ ์์ ๋ฐ ๊ฒฐ๊ณผ
id |
select_type |
table |
type |
possible_keys |
key |
key_len |
ref |
rows |
Extra |
1 |
SIMPLE |
table_name |
ref |
idx_table_sri, idx_table_list_order, idx_table_up... |
idx_table_status |
8 |
const |
34 |
|
์ต์
์ต์ |
์ค๋ช |
table |
๊ฒฐ๊ณผ ์ด์ด ์ฐธ์กฐํ๋ ํ ์ด๋ธ |
type |
์กฐ์ธ(join) ํ์ . ์๋ก ๋ค๋ฅธ ํ์ ์ ์กฐ์ธ์ด ์๋์ ์๋๋ฐ, ๊ฐ์ฅ ์ข์๊ฒ๋ถํฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ์์๋ก ๋์ด ์๋ค. |
system : ํ
์ด๋ธ์ด ํ๋์ ๋ ์ฝ๋๋ง ๊ฐ์ง๋ ๊ฒฝ์ฐ ref : eq_ref์ ๋ค๋ฅธ ์ ์ UNIQUE๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค๋ ๊ฒ. range : ์กฐ๊ฑด์ ๋ ์ฝ๋์ ๋ฒ์๊ฐ ์ฃผ์ด์ง ์กฐ์ธ. index : all ํํ์ ๋น์ทํ๋ฉฐ, ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค. all : ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ์ค์บํ๋ค. | |
possible_keys |
์ปฌ๋ผ์ ์ด ํ ์ด๋ธ์์ ์ด์ ์ฐพ๊ธฐ ์ํด MySQL์ด ์ ํํ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์ด ์ปฌ๋ผ์ EXPLAIN ๊ฒฐ๊ณผ์์ ๋ํ๋๋ ํ ์ด๋ธ ์์์๋ ์ ์ ์ผ๋ก ๋ณ๊ฐ์ ์์๊ฐ ๋๋ค. ์ด๊ฒ์ possible_keys์ ์๋ ํค ์ค์ ์ด๋ค ๊ฒ๋ค์ ํ ์ด๋ธ ์์๋ฅผ ๋ง๋๋ ๊ณผ์ ์์๋ ์ฌ์ฉ๋์ง ์์ ์๋ ์์์ ์๋ฏธํ๋ ๊ฒ์ด๋ค. ๋ง์ผ ์ด ์ปฌ๋ผ ๊ฐ์ด NULL์ด๋ผ๋ฉด, ์ฐ๊ด๋ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ์ง ์๊ฒ ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์ ์์๋ WHERE ๊ตฌ๋ฌธ์ ๊ฒ์ฌํ์ฌ ์ด ๊ตฌ๋ฌธ์ด ์ธ๋ฑ์ค ํ๊ธฐ์ ์ ๋นํ ์ปฌ๋ผ์ ์ฐธ์กฐํ๊ณ ์๋์ง ์ฌ๋ถ๋ฅผ ์์ ๋ด์ผ๋ก์จ ์ฟผ๋ฆฌ ์๋๋ฅผ ๊ฐ์ ์ํฌ ์๊ฐ ์๊ฒ ๋๋ค. ๊ทธ๋ฌํ ๊ฒฝ์ฐ๋ผ๋ฉด, ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ํ๋ ์์ฑํ ํ์, EXPLAIN์ ๋ค์ ์ฌ์ฉํด์ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ์ฌํ๋ค. ํ ์ด๋ธ์ด ์ด๋ค ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๊ณ ์๋์ง๋ฅผ ๋ณด๊ธฐ ์ํด์ , SHOW INDEX FROM [ํ ์ด๋ธ๋ช ] ์ ์ฌ์ฉํ๋ค. |
key |
possible_keys์ ๋์จ ํค ์ค์์ ์ค์ ๋ก ์ฌ์ฉํ ํค๋ก MySQL์ด ์ค์ ๋ก ์ฌ์ฉํ ์์ ์ธ ํค(์ธ๋ฑ์ค)๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋ง์ผ ์๋ฌด๋ฐ ์ธ๋ฑ์ค๋ ์ ํ๋์ง ์์๋ค๋ฉด, ๊ทธ ํค๋ NULL์ด ๋๋ค. MySQL๋ก ํ์ฌ๊ธ possible_keys ์ปฌ๋ผ์ ์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋๋ ๋ฌด์ํ๋๋ก ๋ง๋ค๊ธฐ ์ํด์, FORCE INDEX, USE INDEX ๋๋ IGNORE INDEX๋ฅผ ์ฟผ๋ฆฌ์์ ์ฌ์ฉํ๋๋ก ํ๋ค. MyISAM ๋ฐ BDB ํ ์ด๋ธ์ ๊ฒฝ์ฐ์๋ ANALYZE TABLE์ ๊ตฌ๋์ํค๋ฉด ์ตํฐ๋ง์ด์ ๊ฐ ๋ณด๋ค ์ข์ ์ธ๋ฑ์ค๋ฅผ ์ ํํ๋๋ก ๋์์ ์ค ์๊ฐ ์๋ค. MyISAM ํ ์ด๋ธ์ ๊ฒฝ์ฐ์๋ myisamchk --analyze ๊ฐ ๋์ผํ ์ญํ ์ ํ๋ค. |
key_len |
MySQL์ด ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ ํค์ ๊ธธ์ด๋ฅผ ๋ํ๋ธ๋ค. ๋ง์ผ key ์ปฌ๋ผ์ด NULL์ด๋ผ๋ฉด, ์ด ๊ฐ๋ NULL์ด ๋๋ค. key_len ๊ฐ์ ๋ค์ค-๋ถ๋ถ(multiple-part) ํค ์ค์ ์ผ๋ง๋ ๋ง์ ๋ถ๋ถ์ MySQL์ด ์ค์ ๋ก ์ฌ์ฉํ๋์ง๋ฅผ ์ ์ ์๋๋ก ํ๋ค. |
ref |
ํ ์ด๋ธ์์ ์ด์ ์ ํํ๊ธฐ ์ํด key ์ปฌ๋ผ ์์ ๋ช ๋ช ๋์ด ์๋ ์ธ๋ฑ์ค๋ฅผ ์ด๋ค ์ปฌ๋ผ ๋๋ ์์(constant)์ ๋น๊ตํ๋์ง๋ฅผ ๋ณด์ฌ์ค๋ค. |
rows |
MySQL์ด ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํด ์กฐ์ฌํด์ผํ๋ ์ด์ ์ซ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. |
Extra |
MySQL์ด ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํด์ํ๋์ง์ ๊ดํ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. |
distinct : ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ์์ ๋ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ๋ค๋ฅธ ๋ ์ฝ๋๊ฐ ์๋์ง ๊ฒ์ฌํ์ง ์์. not exist : left join ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋์ ๋ ์ฝ๋๋ฅผ ์ฐพ์์ ๋ ๋ค๋ฅธ ๋ ์ฝ๋์ ์กฐํฉ์ ๋ ์ด์ ๊ฒ์ฌํ์ง ์์. range checked for each record : ์ต์ ์ ์ธ๋ฑ์ค๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฐจ์ ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํจ. using filesort : MySQL์ด ์ ๋ ฌ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ๋ถ๊ฐ์ ์ธ ์ผ์ ํจ. using index : SELECTํ ๋ ์ธ๋ฑ์ค ํ์ผ๋ง ์ฌ์ฉ. using temporary : ์์ ํ ์ด๋ธ์ ์ฌ์ฉํ๋ค. order by ๋ group by ํ ๋ ์ฃผ๋ก ์ฌ์ฉ. where used : ์กฐ๊ฑด์ ์ฌ์ฉํจ. |