Execution Plan
MySQL ์คํ ๊ณํ
์คํ ๊ณํ์ด๋?
MySQL ์คํ ๊ณํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ์ ํํ๋ ๊ฒฝ๋ก๋ฅผ ์๋ฏธํฉ๋๋ค. ์คํ ๊ณํ์ ์ดํดํ๊ณ ์ต์ ํํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ต ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
์คํ ๊ณํ์ ํ์ธํ๋ ๋ฐฉ๋ฒ
์คํ ๊ณํ์ ํ์ธํ๋ ค๋ฉด EXPLAIN
ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฅผ ํตํด MySQL์ด ์ฟผ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์คํํ๋์ง ์ ์ ์์ต๋๋ค.
์คํ ๊ณํ ์ฝ๊ธฐ
์ด์ ๋จ๋ฝ์์ EXPLAIN
ํค์๋๋ก ์คํ ๊ณํ์ ์กฐํํ๋ฉด id
, select_type
, table
, type
, key
๋ฑ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋์์ต๋๋ค.
ID
์คํ ์์๋ฅผ ํ์ํ๋ ์ซ์๋ก, ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ ์ฐจ๋ก๋ฅผ ๋ํ๋ด๋ ๊ฒ์ id
๋ก ํ๊ธฐํฉ๋๋ค. ์กฐ์ธ์ ํ ๋๋ ๋์ผํ id
๊ฐ ํ์๋ฉ๋๋ค.
SELECT_TYPE
SQL ๋ฌธ์ ๊ตฌ์ฑํ๋ SELECT
๋ฌธ์ ์ ํ์ ์ถ๋ ฅํ๋ ํญ๋ชฉ์
๋๋ค.
SELECT
๋ฌธ์ด ๋จ์ํ FROM
์ ์ ์์นํ ๊ฒ์ธ์ง, ์๋ธ์ฟผ๋ฆฌ์ธ์ง, UNION
์ ๋ก ๋ฌถ์ธ SELECT
๋ฌธ์ธ์ง ๋ฑ์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
SIMPLE
UNION
์ด๋ ๋ด๋ถ ์ฟผ๋ฆฌ๊ฐ ์๋ SELECT
๋ฌธ์ ์๋ฏธํฉ๋๋ค.
๋ง ๊ทธ๋๋ก ๋จ์ํ SELECT
๊ตฌ๋ฌธ์ผ๋ก๋ง ์์ฑ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
PRIMARY
์๋ธ์ฟผ๋ฆฌ๊ฐ ํฌํจ๋ SQL ๋ฌธ์ด ์์ ๋ ์ฒซ ๋ฒ์งธ SELECT
๋ฌธ์ ํด๋นํ๋ ๊ตฌ๋ฌธ์ ํ์๋๋ ์ ํ์
๋๋ค.
SUBQUERY
๋
๋ฆฝ์ ์ผ๋ก ์ํ๋๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค.
SELECT
์ ์ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ์ WHERE
์ ์ ์ค์ฒฉ ์๋ธ์ฟผ๋ฆฌ์ผ ๊ฒฝ์ฐ์ ํด๋นํฉ๋๋ค.
DERIVED
FROM
์ ์ ์์ฑ๋ ์๋ธ์ฟผ๋ฆฌ๋ผ๋ ์๋ฏธ์
๋๋ค. ์ฆ, FROM
์ ์ ๋ณ๋ ์์ ํ
์ด๋ธ์ธ ์ธ๋ผ์ธ ๋ทฐ๋ฅผ ๋งํฉ๋๋ค.
UNION
SELECT
๋ฌธ์์ ์ฒซ ๋ฒ์งธ SELECT
๊ตฌ๋ฌธ์ ์ ์ธํ ์ดํ์ SELECT
๊ตฌ๋ฌธ์ ํด๋นํ๋ค๋ ๊ฒ์ ๋ํ๋
๋๋ค. ์ด๋ UNION
๊ตฌ๋ฌธ์ ์ฒซ ๋ฒ์งธ SELECT
์ ์ PRIMARY
์ ํ์ผ๋ก ์ถ๋ ฅ๋ฉ๋๋ค.
UNION RESULT
UNION ALL
์ด ์๋ UNION
๊ตฌ๋ฌธ์ผ๋ก SELECT
์ ์ ๊ฒฐํฉํ์ ๋ ์ถ๋ ฅ๋ฉ๋๋ค. UNION
์ ์ถ๋ ฅ ๊ฒฐ๊ณผ์ ์ค๋ณต์ด ์๋ ์ ์ผํ ์์ฑ์ ๊ฐ์ง๋ฏ๋ก ๊ฐ SELECT
์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ ๋ ฌํ์ฌ ์ค๋ณต ์ฒดํฌํ๋ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
ํํธ UNION
๊ตฌ๋ฌธ์ผ๋ก ๊ฒฐํฉ๋๊ธฐ ์ ์ ๊ฐ SELECT
๋ฌธ์ด ์ค๋ณต๋์ง ์๋ ๊ฒฐ๊ณผ๊ฐ ๋ณด์ฅ๋ ๋๋ UNION
๊ตฌ๋ฌธ๋ณด๋ค๋ UNION ALL
๊ตฌ๋ฌธ์ผ๋ก ๋ณ๊ฒฝํ๋ SQL ํ๋์ ์ํํฉ๋๋ค.
DEPENDENT SUBQUERY
UNION
๋๋ UNION ALL
์ ์ฌ์ฉํ๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ ํ
์ด๋ธ์ ์ํฅ์ ๋ฐ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ฉฐ, UNION
์ผ๋ก ์ฐ๊ฒฐ๋ ๋จ์ ์ฟผ๋ฆฌ๋ค ์ค ์ฒ์์ผ๋ก ์์ฑํ ๋จ์ ์ฟผ๋ฆฌ์ ํด๋นํฉ๋๋ค.
์ฆ, UNION
์ผ๋ก ์ฐ๊ฒฐ๋๋ ์ฒซ ๋ฒ์งธ ๋จ์ ์ฟผ๋ฆฌ๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ์ํํ์ง ๋ชปํ๊ณ ๋ฉ์ธ ํ
์ด๋ธ๋ก๋ถํฐ ๊ฐ์ ํ๋์ฉ ๊ณต๊ธ๋ฐ๋ ๊ตฌ์กฐ (AND ์ฌ์.์ฌ์๋ฒํธ = ๊ด๋ฆฌ์.์ฌ์๋ฒํธ
)์ด๋ฏ๋ก ์ฑ๋ฅ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ SQL ๋ฌธ์ด ํ๋ ๋์์ด ๋ฉ๋๋ค.
DEPENDENT UNION
UNION
๋๋ UNION ALL
์ ์ฌ์ฉํ๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ ํ
์ด๋ธ์ ์ํฅ์ ๋ฐ๋ ๊ฒฝ์ฐ๋ก, UNION
์ผ๋ก ์ฐ๊ฒฐ๋ ๋จ์ ์ฟผ๋ฆฌ ์ค ์ฒซ ๋ฒ์งธ ๋จ์ ์ฟผ๋ฆฌ๋ฅผ ์ ์ธํ๊ณ ๋ ๋ฒ์งธ ๋จ์ ์ฟผ๋ฆฌ์ ํด๋น๋ฉ๋๋ค.
์ฆ, UNION
์ผ๋ก ์ฐ๊ฒฐ๋๋ ๋ ๋ฒ์งธ ์ดํ์ ๋จ์ ์ฟผ๋ฆฌ๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ์ํํ์ง ๋ชปํ๊ณ ๋ฉ์ธ ํ
์ด๋ธ๋ก๋ถํฐ ๊ฐ์ ํ๋์ฉ ๊ณต๊ธ๋ฐ๋ ๊ตฌ์กฐ์ด๋ฏ๋ก ์ฑ๋ฅ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ SQL ๋ฌธ์ด ํ๋ ๋์์ด ๋ฉ๋๋ค.
UNCACHEABLE SUBQUERY
๋ง ๊ทธ๋๋ก ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ์ฌ ์ฌํ์ฉ๋์ด์ผ ํ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฌ์ฌ์ฉ๋์ง ๋ชปํ ๋ ์ถ๋ ฅ๋๋ ์ ํ์ ๋๋ค.
ํด๋น ์๋ธ์ฟผ๋ฆฌ ์์ ์ฌ์ฉ์ ์ ์ ํจ์๋ ์ฌ์ฉ์ ๋ณ์๊ฐ ํฌํจ๋๊ฑฐ๋ RAND()
, UUID()
ํจ์ ๋ฑ์ ์ฌ์ฉํ์ฌ ๋งค๋ฒ ์กฐํ ์๋ง๋ค ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ์ ํด๋น๋ฉ๋๋ค.
๋ง์ฝ ์์ฃผ ํธ์ถ๋๋ SQL ๋ฌธ์ด๋ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ์์ฃผํ ์ ์๋๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉํฅ์ผ๋ก SQL ํ๋์ ๊ฒํ ํด๋ณผ ์ ์์ต๋๋ค.
MATERIALIZED
IN
์ ๊ตฌ๋ฌธ์ ์ฐ๊ฒฐ๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์์ ํ
์ด๋ธ์ ์์ฑํ ๋ค, ์กฐ์ธ์ด๋ ๊ฐ๊ณต ์์
์ ์ํํ ๋ ์ถ๋ ฅ๋๋ ์ ํ์
๋๋ค. ์ฆ, IN
์ ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์์ ํ
์ด๋ธ๋ก ๋ง๋ค์ด์ ์กฐ์ธ ์์
์ ์ํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
TABLE
table
์ ๋ง ๊ทธ๋๋ก ํ
์ด๋ธ๋ช
์ ํ์ํ๋ ํญ๋ชฉ์
๋๋ค. ์คํ ๊ณํ ์ ๋ณด์์ ํ
์ด๋ธ๋ช
์ด๋ ํ
์ด๋ธ ๋ณ์นญ(alias)์ ์ถ๋ ฅํ๋ฉฐ, ์๋ธ์ฟผ๋ฆฌ๋ ์์ ํ
์ด๋ธ์ ๋ง๋ค์ด์ ๋ณ๋์ ์์
์ ์ํํ ๋๋ <subquery#>
๋ <derived#>
๋ผ๊ณ ์ถ๋ ฅ๋ฉ๋๋ค.
partitions
์คํ ๊ณํ์ ๋ถ๊ฐ ์ ๋ณด๋ก, ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ ผ๋ฆฌ์ ์ธ ์์ญ์ ํ์ํ๋ ํญ๋ชฉ์ ๋๋ค. ์ฌ์ ์ ์ ์ํ ์ ์ฒด ํํฐ์ ์ค ํน์ ํํฐ์ ์ ์ ํ์ ์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ด SQL ์ฑ๋ฅ ์ธก๋ฉด์์ ์ ๋ฆฌํฉ๋๋ค. ๋ง์ฝ ๋๋ฌด ๋ง์ ์์ญ์ ํํฐ์ ์ ์ ๊ทผํ๋ ๊ฒ์ผ๋ก ์ถ๋ ฅ๋๋ค๋ฉด ํํฐ์ ์ ์๋ฅผ ํ๋ํด๋ด์ผ ํ ๊ฒ์ ๋๋ค.
TYPE
ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฐพ์์ง์ ๊ดํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ํญ๋ชฉ์ ๋๋ค. ํ ์ด๋ธ์ ์ฒ์๋ถํฐ ๋๊น์ง ์ ๋ถ ํ์ธํ ์ง, ์๋๋ฉด ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๊ฐ์ง ๋ฑ์ ํด์ํ ์ ์์ต๋๋ค.
SYSTEM
ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์๊ฑฐ๋ ํ ๊ฐ๋ง ์๋ ๊ฒฝ์ฐ๋ก, ์ฑ๋ฅ์ ์ต์์ type
์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
CONST
์กฐํ๋๋ ๋ฐ์ดํฐ๊ฐ ๋จ 1๊ฑด์ผ ๋ ์ถ๋ ฅ๋๋ ์ ํ์ผ๋ก, ์ฑ๋ฅ์ ๋งค์ฐ ์ ๋ฆฌํ ๋ฐฉ์์ ๋๋ค.
๊ณ ์ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธํค๋ฅผ ์ฌ์ฉํ์ฌ ๋จ 1๊ฑด์ ๋ฐ์ดํฐ์๋ง ์ ๊ทผํ๋ฉด ๋๋ฏ๋ก, ์๋๋ ๋ฆฌ์์ค ์ฌ์ฉ ์ธก๋ฉด์์ ์งํฅํด์ผ ํ ํ์ ์ ๋๋ค.
EQ_REF
์กฐ์ธ์ด ์ํ๋ ๋ ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ฉฐ, ๊ณ ์ ์ธ๋ฑ์ค ๋๋ ๊ธฐ๋ณธ ํค๋ก ๋จ 1๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐฉ์์ ๋๋ค.
๋๋ผ์ด๋น ํ ์ด๋ธ๊ณผ์ ์กฐ์ธ ํค๊ฐ ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ์ ์ผํ๋ฏ๋ก ์กฐ์ธ์ด ์ํ๋ ๋ ์ฑ๋ฅ์ ๊ฐ์ฅ ์ ๋ฆฌํ ๊ฒฝ์ฐ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
REF
์กฐ์ธ์ ์ํํ ๋ ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ ๊ทผ ๋ฒ์๊ฐ 2๊ฐ ์ด์์ผ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฆ, ๋๋ผ์ด๋น ํ ์ด๋ธ์ ํ ๊ฐ ๊ฐ์ด ๋๋ฆฌ๋ธ ํ ์ด๋ธ์์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ก ์กด์ฌํ๋ ์ผ๋๋ค ๊ด๊ณ์ ๋๋ค.
๋ํ, =
, <
, >
๋ฑ์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ธ๋ฑ์ค๋ก ์์ฑ๋ ์ด์ ๋น๊ตํ ๋๋ ์ถ๋ ฅ๋ฉ๋๋ค.
REF_OR_NULL
IS NULL
๊ตฌ๋ฌธ์ ๋ํด ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋๋ก ์ต์ ํ๋ ๋ฐฉ์์
๋๋ค.
ํ
์ด๋ธ์์ ๊ฒ์ํ NULL
๋ฐ์ดํฐ ์์ด ์ ๋ค๋ฉด ref_or_null
๋ฐฉ์์ ํ์ฉํ์ ๋ ํจ์จ์ ์ธ SQL ๋ฌธ์ด ๋ ๊ฒ์ด๋, ๊ฒ์ํ NULL
๋ฐ์ดํฐ ์์ด ๋ง๋ค๋ฉด SQL ํ๋์ ๋์์ด ๋ ๊ฒ์
๋๋ค.
RANGE
ํ
์ด๋ธ ๋ด์ ์ฐ์๋ ๋ฐ์ดํฐ ๋ฒ์๋ฅผ ์กฐํํ๋ ์ ํ์ผ๋ก, =
, <
, <=
, >
, >=
, BETWEEN
, IN
์ฐ์ฐ์๋ฅผ ํตํด ๋ฒ์ ์ค์บ์ ์ํํ๋ ๋ฐฉ์์
๋๋ค.
์ฃผ์ด์ง ๋ฐ์ดํฐ ๋ฒ์ ๋ด์์ ํ ๋จ์๋ก ์ค์บํ์ง๋ง, ์ค์บํ ๋ฒ์๊ฐ ๋์ผ๋ฉด ์ฑ๋ฅ ์ ํ์ ์์ธ์ด ๋ ์ ์์ผ๋ฏ๋ก SQL ํ๋ ๊ฒํ ๋์์ด ๋ฉ๋๋ค.
FULLTEXT
ํ
์คํธ ๊ฒ์์ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ ๋ฌธ ์ธ๋ฑ์ค (FULLTEXT index
)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๋ฐฉ์์
๋๋ค.
INDEX_MERGE
๋ง ๊ทธ๋๋ก ๊ฒฐํฉ๋ ์ธ๋ฑ์ค๋ค์ด ๋์์ ์ฌ์ฉ๋๋ ์ ํ์ ๋๋ค. ์ฆ, ํน์ ํ ์ด๋ธ์ ์์ฑ๋ ๋ ๊ฐ ์ด์์ ์ธ๋ฑ์ค๊ฐ ๋ณํฉ๋์ด ๋์์ ์ ์ฉ๋ฉ๋๋ค.
INDEX
์ธ๋ฑ์ค ํ ์ค์บ์ ์๋ฏธํฉ๋๋ค. ์ฆ, ๋ฌผ๋ฆฌ์ ์ธ ์ธ๋ฑ์ค ๋ธ๋ก์ ์ฒ์๋ถํฐ ๋๊น์ง ํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค.
์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ค์บํ๋ ๋์์ด ์ธ๋ฑ์ค๋ผ๋ ์ ์ด ๋ค๋ฅผ ๋ฟ, ์ดํ ์ค๋ช
ํ ALL
์ ํ(ํ
์ด๋ธ ํ ์ค์บ ๋ฐฉ์)๊ณผ ์ ์ฌํฉ๋๋ค.
์ธ๋ฑ์ค๋ ๋ณดํต ํ
์ด๋ธ๋ณด๋ค ํฌ๊ธฐ๊ฐ ์์ผ๋ฏ๋ก ํ
์ด๋ธ ํ ์ค์บ ๋ฐฉ์๋ณด๋ค๋ ๋น ๋ฅผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
ALL
ํ
์ด๋ธ์ ์ฒ์๋ถํฐ ๋๊น์ง ์ฝ๋ ํ
์ด๋ธ ํ ์ค์บ ๋ฐฉ์์ ํด๋น๋๋ ์ ํ์
๋๋ค. ALL
์ ํ์ ํ์ฉํ ์ ์๋ ์ธ๋ฑ์ค๊ฐ ์๊ฑฐ๋, ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์คํ๋ ค ๋นํจ์จ์ ์ด๋ผ๊ณ ์ตํฐ๋ง์ด์ ๊ฐ ํ๋จํ์ ๋ ์ ํ๋ฉ๋๋ค.
ALL
์ ํ์ผ ๋๋ ์ธ๋ฑ์ค๋ฅผ ์๋ก ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ์ธ๋ฑ์ค๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก SQL ํ๋์ ํ ์ ์์ผ๋, ์ ์ฒด ํ
์ด๋ธ ์ค 10~20% ์ด์ ๋ถ๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋๋ ALL
์ ํ์ด ์คํ๋ ค ์ฑ๋ฅ์ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
POSSIBLE_KEYS
์ตํฐ๋ง์ด์ ๊ฐ SQL ๋ฌธ์ ์ต์ ํํ๊ณ ์ ์ฌ์ฉํ ์ ์๋ ์ธ๋ฑ์ค ๋ชฉ๋ก์ ์ถ๋ ฅํฉ๋๋ค.
๋ค๋ง ์ค์ ์ฌ์ฉํ ์ธ๋ฑ์ค๊ฐ ์๋, ์ฌ์ฉํ ์ ์๋ ํ๋ณด๊ตฐ์ ๊ธฐ๋ณธ ํค์ ์ธ๋ฑ์ค ๋ชฉ๋ก๋ง ๋ณด์ฌ์ฃผ๋ฏ๋ก SQL ํ๋์ ํจ์ฉ์ฑ์ ์์ต๋๋ค.
KEY
์ตํฐ๋ง์ด์ ๊ฐ SQL ๋ฌธ์ ์ต์ ํํ๊ณ ์ ์ฌ์ฉํ ๊ธฐ๋ณธ ํค(PK) ๋๋ ์ธ๋ฑ์ค๋ช ์ ์๋ฏธํฉ๋๋ค.
์ด๋ค ์ธ๋ฑ์ค๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋์ง ํ์ธํ ์ ์์ผ๋ฏ๋ก, ๋นํจ์จ์ ์ธ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์์๋ค๋ฉด SQL ํ๋์ ๋์์ด ๋ฉ๋๋ค.
KEY_LEN
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๋ ์ธ๋ฑ์ค ์ ์ฒด๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ผ๋ถ ์ธ๋ฑ์ค๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ฌ์ฉํ ์ธ๋ฑ์ค์ ๋ฐ์ดํธ ์๋ฅผ ์๋ฏธํฉ๋๋ค.
REF
ref
๋ ํ
์ด๋ธ ์กฐ์ธ์ ์ํํ ๋ ์ด๋ค ์กฐ๊ฑด์ผ๋ก ํด๋น ํ
์ด๋ธ์ ์ก์ธ์ค๋์๋์ง๋ฅผ ์๋ ค์ฃผ๋ ์ ๋ณด์
๋๋ค.
ROWS
SQL ๋ฌธ์ ์ํํ๊ณ ์ ์ ๊ทผํ๋ ๋ฐ์ดํฐ์ ๋ชจ๋ ํ ์๋ฅผ ๋ํ๋ด๋ ์์ธก ํญ๋ชฉ์ ๋๋ค.
์ฆ, ๋์คํฌ์์ ๋ฐ์ดํฐ ํ์ผ์ ์ฝ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์ฒ๋ฆฌํด์ผ ํ ํ ์๋ฅผ ์์ํ๋ ๊ฐ์ผ๋ก, ์์๋ก ๋ณ๋๋๋ MySQL์ ํต๊ณ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฐ์ถํ๋ ๊ฐ์ด๋ฏ๋ก ์์น๊ฐ ์ ํํ์ง๋ ์์ต๋๋ค.
FILTERED
SQL ๋ฌธ์ ์ํํ๊ณ ์ ์ ๊ทผํ๋ ๋ฐ์ดํฐ์ ๋ชจ๋ ํ ์๋ฅผ ๋ํ๋ด๋ ์์ธก ํญ๋ชฉ์ ๋๋ค.
์ฆ, ๋์คํฌ์์ ๋ฐ์ดํฐ ํ์ผ์ ์ฝ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์ฒ๋ฆฌํด์ผ ํ ํ ์๋ฅผ ์์ํ๋ ๊ฐ์ด๋ฉฐ, ์์๋ก ๋ณ๋๋๋ MySQL์ ํต๊ณ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฐ์ถํ๋ฏ๋ก ์์น๊ฐ ์ ํํ์ง๋ ์์ต๋๋ค.
ํํธ, SQL ๋ฌธ์ ์ต์ข
๊ฒฐ๊ณผ ๊ฑด์์ ๋น๊ตํด rows
์๊ฐ ํฌ๊ฒ ์ฐจ์ด ๋ ๋๋ ๋ถํ์ํ๊ฒ MySQL ์์ง๊น์ง ๋ฐ์ดํฐ๋ฅผ ๋ง์ด ๊ฐ์ ธ์๋ค๋ ๋ป์ด๋ฏ๋ก SQL ํ๋์ ๋์์ด ๋ ์ ์์ต๋๋ค.
EXTRA
SQL ๋ฌธ์ ์ด๋ป๊ฒ ์ํํ ๊ฒ์ธ์ง์ ๊ดํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ํญ๋ชฉ์ ๋๋ค. ์ด๋ฌํ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ค์ ์ธ๋ฏธ์ฝ๋ก (;)์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ฌ๋ฌ ๊ฐ์ง ์ ๋ณด๋ฅผ ๋์ดํ ์ ์์ผ๋ฉฐ, ์ฝ 30์ฌ ๊ฐ์ง ํญ๋ชฉ์ผ๋ก ์ ๋ฆฌํ ์ ์์ต๋๋ค.
Distinct
์ค๋ณต์ด ์ ๊ฑฐ๋์ด ์ ์ผํ ๊ฐ์ ์ฐพ์ ๋ ์ถ๋ ฅ๋๋ ์ ๋ณด์
๋๋ค.
์ค๋ณต ์ ๊ฑฐ๊ฐ ํฌํจ๋๋ DISTINCT
ํค์๋๋ UNION
๊ตฌ๋ฌธ์ด ํฌํจ๋ ๊ฒฝ์ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
Using where
์คํ ๊ณํ์์ ์์ฃผ ๋ณผ ์ ์๋ extra
์ ๋ณด์
๋๋ค.
์ด๋ WHERE
์ ์ ํํฐ ์กฐ๊ฑด์ ์ฌ์ฉํด MySQL ์์ง์ผ๋ก ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ๊ฒ์ด๋ผ๋ ์๋ฏธ๋ก ์ดํดํ ์ ์์ต๋๋ค.
Using temporary
๋ฐ์ดํฐ์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์์ ํ ์ด๋ธ์ ์์ฑํ๊ฒ ๋ค๋ ์๋ฏธ์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ ์ฅํ ๋ค์ ์ ๋ ฌ ์์ ์ ์ํํ๊ฑฐ๋ ์ค๋ณต์ ์ ๊ฑฐํ๋ ์์ ๋ฑ์ ์ํํฉ๋๋ค.
๋ณดํต DISTINCT
, GROUP BY
, ORDER BY
๊ตฌ๋ฌธ์ด ํฌํจ๋ ๊ฒฝ์ฐ Using temporary
์ ๋ณด๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
์์ ํ
์ด๋ธ์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑํ๊ฑฐ๋, ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ด๊ณผํ์ฌ ๋์คํฌ์ ์์ ํ
์ด๋ธ์ ์์ฑํ๋ฉด Using temporary
๋ ์ฑ๋ฅ ์ ํ์ ์์ธ์ด ๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด ํญ๋ชฉ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋๋ ์ฟผ๋ฆฌ๋ SQL ํ๋์ ๋์์ด ๋ ์ ์์ต๋๋ค.
Using index
๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํฐ ํ์ผ์ ์ฝ์ง ์๊ณ ์ธ๋ฑ์ค๋ง์ ์ฝ์ด์ SQL ๋ฌธ์ ์์ฒญ ์ฌํญ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
์ผ๋ช ์ปค๋ฒ๋ง ์ธ๋ฑ์ค(covering index) ๋ฐฉ์์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ธ๋ฑ์ค๋ก ๊ตฌ์ฑ๋ ์ด๋ง SQL ๋ฌธ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ด ๋ฐฉ์์ ํ์ฉํฉ๋๋ค.
๋ฌผ๋ฆฌ์ ์ผ๋ก๋ ํ ์ด๋ธ๋ณด๋ค ์ธ๋ฑ์ค๊ฐ ์๊ณ ์ ๋ ฌ๋์ด ์์ผ๋ฏ๋ก ์ ์ ์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋ ์ฑ๋ฅ ์ธก๋ฉด์์ ํจ์จ์ ์ ๋๋ค.
Using filesort
์ ๋ ฌ์ด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ณ ์ ๋ ฌ ์์ ์ ์ํํ๋ค๋ ์๋ฏธ์ ๋๋ค.
๋ณดํต ์ด๋ฏธ ์ ๋ ฌ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ์ ์ธ ์ ๋ ฌ ์์ ์ด ํ์ ์์ง๋ง, ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ ๋๋ ์ ๋ ฌ์ ์ํด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฆฌ๊ฒ ๋ฉ๋๋ค.
์ถ๊ฐ์ ์ธ ์ ๋ ฌ ์์ ์ด๋ฏ๋ก ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋๋ก SQL ํ๋ ๊ฒํ ๋์์ด ๋ ์ ์์ต๋๋ค.
Using join buffer
์กฐ์ธ์ ์ํํ๊ธฐ ์ํด ์ค๊ฐ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์กฐ์ธ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ ๋๋ค.
์ฆ, ๋๋ผ์ด๋น ํ ์ด๋ธ์ ๋ฐ์ดํฐ์ ๋จผ์ ์ ๊ทผํ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ธ ๋ฒํผ์ ๋ด๊ณ ๋ ๋ค, ์กฐ์ธ ๋ฒํผ์ ๋๋ฆฌ๋ธ ํ ์ด๋ธ ๊ฐ์์ ์ผ์นํ๋ ์กฐ์ธ ํค ๊ฐ์ ์ฐพ๋ ๊ณผ์ ์ ์ํํฉ๋๋ค.
Using index condition
MySQL ์์ง์์ ์ธ๋ฑ์ค๋ก ์์ฑ๋ ์ด์ ํํฐ ์กฐ๊ฑด์ ๋ฐ๋ผ ์์ฒญ๋ ๋ฐ์ดํฐ๋ง ํํฐ๋งํ๋ Using where
๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ, ํํฐ ์กฐ๊ฑด์ ์คํ ๋ฆฌ์ง ์์ง์ผ๋ก ์ ๋ฌํ์ฌ ํํฐ๋ง ์์
์ ๋ํ MySQL ์์ง์ ๋ถํ๋ฅผ ์ค์ด๋ ๋ฐฉ์์
๋๋ค.
์ด๋ ์คํ ๋ฆฌ์ง ์์ง์ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๋ฅผ MySQL ์์ง์ผ๋ก ์ ์กํ๋ ๋ฐ์ดํฐ ์์ ์ค์ฌ ์ฑ๋ฅ ํจ์จ์ ๋์ผ ์ ์๋ ์ตํฐ๋ง์ด์ ์ ์ต์ ํ ๋ฐฉ์์ ๋๋ค.
Not exists
Not exists
๋ ํ๋์ ์ผ์นํ๋ ํ์ ์ฐพ์ผ๋ฉด ์ถ๊ฐ๋ก ํ์ ๋ ๊ฒ์ํ์ง ์์๋ ๋ ๋ ์ถ๋ ฅ๋๋ ์ ํ์
๋๋ค.
ํด๋น ๋ฉ์ปค๋์ฆ์ ์ผ์ชฝ ์ธ๋ถ ์กฐ์ธ ๋๋ ์ค๋ฅธ์ชฝ ์ธ๋ถ ์กฐ์ธ์์ ํ ์ด๋ธ์ ์กด์ฌํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ช ์์ ์ผ๋ก ๊ฒ์ํ ๋ ๋ฐ์ํฉ๋๋ค.
Tuning Decision
์คํ ๊ณํ์ ์ํํ์ฌ ์ถ๋ ฅ๋ ์ ๋ณด๋ฅผ ์ดํด๋ณด์์ ๋, SQL ํ๋ ๋์์ธ ์คํ ๊ณํ๊ณผ ํ๋์ด ํ์ํ์ง ์์ ์คํ ๊ณํ์ ๋ช ํํ ๊ตฌ๋ถํ๊ธฐ๋ ์ด๋ ค์ด ์์ ์ ๋๋ค.
์ด๋ ๊ฒํ ๋์์ธ ์คํ ๊ณํ ์ด์ select_type
, type
, extra
์
๋๋ค.
์คํ ๊ณํ ์ํ
EXPLAIN FORMAT = TRADITIONAL
๊ธฐ๋ณธ์ ์ธ ์คํ ๊ณํ์ EXPLAIN
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ ฅํ๋ฉฐ, ๊ธฐ๋ณธ ํฌ๋งท์ TRADITIONAL
์
๋๋ค.
๋ฐ๋ผ์ ๋ช
์ํ์ง ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ์ ์ธ ์คํ ๊ณํ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
EXPLAIN FORMAT = TREE
ํธ๋ฆฌ ํํ๋ก ์ถ๊ฐ๋ ์คํ ๊ณํ ํญ๋ชฉ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด ํ์์ ์ฟผ๋ฆฌ์ ์คํ ๊ณํ์ ๋ณด๋ค ์๊ฐ์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ณด์ฌ์ค๋๋ค.
EXPLAIN FORMAT = JSON
JSON ํํ๋ก ์ถ๊ฐ๋ ์คํ ๊ณํ ํญ๋ชฉ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด ํ์์ ์ฟผ๋ฆฌ์ ์คํ ๊ณํ์ ๊ตฌ์กฐํ๋ JSON ๋ฐ์ดํฐ๋ก ์ ๊ณตํ์ฌ, ํ๋ก๊ทธ๋จ์์ ์ฝ๊ฒ ํ์ฑํ๊ณ ๋ถ์ํ ์ ์๋๋ก ํฉ๋๋ค.
EXPLAIN PARTITIONS
ํํฐ์ ์ผ๋ก ์ค์ ๋ ํ ์ด๋ธ์ ๋ํด ์ ๊ทผ ๋์์ธ ํํฐ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ์ด ์ต์ ์ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ๊ฐ ํน์ ํํฐ์ ์๋ง ์ ๊ทผํ๋์ง, ์๋๋ฉด ๋ชจ๋ ํํฐ์ ์ ์ค์บํ๋์ง๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
3. ์คํ ๊ณํ ์ต์ ํ
3.1. ์ธ๋ฑ์ค ์ฌ์ฉ ์ธ๋ฑ์ค๋ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ธ๋ฑ์ค๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ๊ฒ์ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
3.2. ์กฐ์ธ ์ต์ ํ ์กฐ์ธ ์์์ ์ ๋ต์ ์ต์ ํํ๋ฉด ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. MySQL์ Nested Loop ์กฐ์ธ์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ์ง๋ง, ํ์ํ ๊ฒฝ์ฐ ์กฐ์ธ ์์๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
3.3. ์ฟผ๋ฆฌ ์ฌ์์ฑ ์ฟผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ์ฌ ์คํ ๊ณํ์ ์ต์ ํํ ์ ์์ต๋๋ค. ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์กฐ์ธ์ผ๋ก ๋ณ๊ฒฝํ๊ฑฐ๋, ๋ถํ์ํ ์ปฌ๋ผ์ ์ ๊ฑฐํ์ฌ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
4. ๊ณ ๊ธ ์ฃผ์
4.1. ์คํ ๊ณํ ์บ์ MySQL์ ์คํ ๊ณํ์ ์บ์ํ์ฌ ๋ฐ๋ณต์ ์ธ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ๊ฐ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋์ผํ ์ฟผ๋ฆฌ์ ๋ํด ์คํ ๊ณํ์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
4.2. ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ MySQL Workbench, Percona Toolkit, pt-query-digest ๋ฑ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ต์ ํํ ์ ์์ต๋๋ค.
4.3. MySQL ์ต์ ๋ฒ์ ๊ธฐ๋ฅ MySQL ์ต์ ๋ฒ์ ์์๋ ์คํ ๊ณํ๊ณผ ๊ด๋ จ๋ ์ฌ๋ฌ ๊ฐ์ ์ฌํญ์ด ๋์ ๋์์ต๋๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ๋ ๋์ ์ฑ๋ฅ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
Last updated