ํต๊ณ ์ ๋ณด
MySQL ์๋ฒ์ ํต๊ณ ์ ๋ณด
- MySQL 5.6๋ถํฐ๋ InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ์ฌ์ฉํ๋ ํ
์ด๋ธ์ ๋ํ ํต๊ณ ์ ๋ณด๋ฅผ ์๊ตฌ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ๊ฐ์ ๋์๋ค.
- ์ด์ ์๋ ๋ฉ๋ชจ๋ฆฌ์๋ง ์ ์ฅ๋์ด MySQL ์๋ฒ๊ฐ ์ฌ์์๋๋ฉด ํต๊ณ ์ ๋ณด๊ฐ ์ด๊ธฐํ๋๋ค.
ํ์คํ ๊ทธ๋จ
ํ์คํ ๊ทธ๋จ์ ์ ๋ณด ์์ง ๋ฐ ์ญ์
- Singleton Histogram
- ์ปฌ๋ผ๊ฐ ๊ฐ๋ณ๋ก ๋ ์ฝ๋ ๊ฑด์๋ฅผ ๊ด๋ฆฌํ๋ ํ์คํ ๊ทธ๋จ
- Equi-Height Histogram
- ์ปฌ๋ผ๊ฐ์ ๋ฒ์๋ฅผ ๊ท ๋ฑํ ๊ฐ์๋ก ๊ตฌ๋ถํด์ ๊ด๋ฆฌํ๋ ํ์คํ ๊ทธ๋จ
ํ์คํ ๊ทธ๋จ์ ์ฉ๋
- ํ์คํ ๊ทธ๋จ ์ ๋ณด๊ฐ ์์ผ๋ฉด ์ตํฐ๋ง์ด์ ๋ ๋ฐ์ดํฐ๊ฐ ๊ท ๋ฑํ๊ฒ ๋ถํฌ๋ผ ์์ ๊ฒ์ผ๋ก ์์ธกํ๋ค. ํ์ง๋ง ํ์คํ ๊ทธ๋จ์ด ์์ผ๋ฉด ํน์ ๋ฒ์์ ๋ฐ์ดํฐ๊ฐ ๋ง๊ณ ์ ์์ ์๋ณํ ์ ์๋ค.
ํ์คํ ๊ทธ๋จ๊ณผ ์ธ๋ฑ์ค
- ์ธ๋ฑ์ค ๋ค์ด๋ธ (Index Dive)
- ์ตํฐ๋ง์ด์ ๋ ์คํ ๊ณํ ์๋ฆฝ ์ ์ค์ ์ธ๋ฑ์ค B-Tree๋ฅผ ์ํ๋งํ์ฌ ์กฐ๊ฑด์ ์ ์ผ์นํ๋ ๋ ์ฝ๋ ๊ฑด์๋ฅผ ์์ธกํ๋ค.
- ์ธ๋ฑ์ค์ ํ์คํ ๊ทธ๋จ์ ๊ด๊ณ
- MySQL 8.0์์๋ ์ธ๋ฑ์ค๊ฐ ์๋ ์ปฌ๋ผ์ ํ์คํ ๊ทธ๋จ๋ณด๋ค ์ค์ ์ธ๋ฑ์ค ๋ค์ด๋ธ๋ฅผ ํตํด ์์งํ ์ ๋ณด๋ฅผ ์ฐ์ ํ์ฌ ์ฌ์ฉํ๋ค.
- ํ์คํ ๊ทธ๋จ์ ์ฃผ๋ก ์ธ๋ฑ์ค๊ฐ ์๋ ์ปฌ๋ผ์ ๋ฐ์ดํฐ ๋ถํฌ๋ฅผ ์ฐธ์กฐํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
์ฝ์คํธ ๋ชจ๋ธ(Cost Model)
- ์ฝ์คํธ ๋ชจ๋ธ์ ์ญํ
- ์ ์ฒด ์ฟผ๋ฆฌ ๋น์ฉ์ ๊ณ์ฐํ๋ ๋จ์ ์์ ๋ค์ ๋น์ฉ์ ๊ด๋ฆฌํ๋ค.
- MySQL 5.7๋ถํฐ mysql์
server_cost์engine_costํ ์ด๋ธ์ ํตํด ๊ด๋ฆฌ์๊ฐ ๋น์ฉ ์์๋ฅผ ์กฐ์ ํ ์ ์๊ฒ ๋์๋ค.
- ์ฃผ์ ๋น์ฉ ์์
io_block_read_cost- ๋์คํฌ ๋ฐ์ดํฐ ํ์ด์ง ์ฝ๊ธฐ ๋น์ฉ.
row_evaluate_cost- ๋ ์ฝ๋ ๋น๊ต ๋น์ฉ.
- ์ด ๊ฐ์ด ์ฆ๊ฐํ๋ฉด ํ ์ค์บ ๋น์ฉ์ด ๋์์ ธ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค,.
์คํ ๊ณํ ํ์ธ
์คํ ๊ณํ ์ถ๋ ฅ ํฌ๋งท
- FORMAT ์ต์
์ ํตํด ์คํ ๊ณํ์ ํ์ ๋ฐฉ๋ฒ์ JSON์ด๋ TREE, ๋จ์ ํ
์ด๋ธ ํํ๋ก ์ ํํ ์ ์๋ค.
EXPLAIN FORMAT=TREE
์ฟผ๋ฆฌ์ ์คํ ์๊ฐ ํ์ธ
- EXPLAIN ANALYZE
- ์ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๋จ๊ณ๋ณ ์์ ์๊ฐ, ์ฒ๋ฆฌํ ๋ ์ฝ๋ ๊ฑด์, ๋ฐ๋ณต ํ์(loops)๋ฅผ TREE ํฌ๋งท์ผ๋ก ๋ณด์ฌ์ค๋ค,.
์คํ ๊ณํ ๋ถ์
id ์นผ๋ผ
๋จ์(SELECT) ์ฟผ๋ฆฌ ์๋ณ์
SELECTํค์๋ ๋จ์๋ก ๋ถ์ฌ๋๋ ์๋ณ์ ๊ฐ์ด๋ค.- ์กฐ์ธ ์์๋ id๊ฐ ์ฆ๊ฐํ์ง ์๊ณ ๊ฐ์ง๋ง, ์๋ธ์ฟผ๋ฆฌ๋ UNION ์ฌ์ฉ ์ id๊ฐ ์ฆ๊ฐํ๋ค,.
select_type ์นผ๋ผ
๊ฐ ๋จ์ SELECT ์ฟผ๋ฆฌ๊ฐ ์ด๋ค ํ์ ์ ์ฟผ๋ฆฌ์ธ์ง ํ์๋๋ ์ปฌ๋ผ
- SIMPLE
- UNION์ด๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์๋ ๋จ์ SELECT
- PRIMARY
- UNION์ด๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ง ์ฟผ๋ฆฌ์ ๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ(Outer) ๋จ์ ์ฟผ๋ฆฌ
- UNION
- UNION์ผ๋ก ๊ฒฐํฉํ๋ ๋จ์ SELECT ์ฟผ๋ฆฌ ์ค ์ฒซ ๋ฒ์งธ๋ฅผ ์ ์ธํ ๋ ๋ฒ์งธ ์ดํ ๋จ์ SELECT ์ฟผ๋ฆฌ
- DEPENDENT UNION
- UNION์ด๋ UNION ALL๋ก ์งํฉ์ ๊ฒฐํฉํ๋ ์ฟผ๋ฆฌ
- DEPENDENT๋ UNION์ด๋ UNION ALL๋ก ๊ฒฐํฉ๋ ๋จ์ ์ฟผ๋ฆฌ๊ฐ ์ธ๋ถ ์ฟผ๋ฆฌ์ ์ํด ์ํฅ์ ๋ฐ๋ ๊ฒ์ ์๋ฏธ
- UNION RESULT
- UNION ๊ฒฐ๊ณผ๋ฅผ ๋ด์๋๋ ํ ์ด๋ธ์ ์๋ฏธ
- SUBQUERY
- FROM ์ ์ด์ธ์์ ์ฌ์ฉ๋๋ ์๋ธ์ฟผ๋ฆฌ๋ง์ ์๋ฏธ
- DEPENDENT SUBQUERY
- ์๋ธ์ฟผ๋ฆฌ๊ฐ Outer SELECT ์ฟผ๋ฆฌ์์ ์ ์๋ ์ปฌ๋ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ์
- DERIVED
- ๋จ์ SELECT ์ฟผ๋ฆฌ์ ์คํ ๊ฒฐ๊ณผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ์ ์์ ํ ์ด๋ธ์ ์์ฑํ๋ ๊ฒ์ ์๋ฏธ
- DEPENDENT DERIVED
- ํด๋น ํ ์ด๋ธ์ด LATERAL JOIN์ด ์ฌ์ฉ๋ ๊ฒ์ ์๋ฏธ
- UNCACHEABLE SUBQUERY
- ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์บ์๊ฐ ๋ถ๊ฐ๋ฅํ ๋ ํ์
- MATERIALIZED
- FROM ์ ์ด๋ IN(Subquery) ํํ์ ์ฟผ๋ฆฌ์ ์ฉ๋ ์๋ธ์ฟผ๋ฆฌ์ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ฉ
table ์ปฌ๋ผ
์คํ ๋์ ํ ์ด๋ธ
- ์คํ ๊ณํ์ ํ ์ด๋ธ ๊ธฐ์ค์ผ๋ก ํ์๋๋ค.
<derived N>์ id N๋ฒ ์ฟผ๋ฆฌ์ ํ์ ํ ์ด๋ธ์ ์๋ฏธํ๋ค.
partitions ์ปฌ๋ผ
- ํํฐ์ ํ ์ด๋ธ์ ๋ํ ์คํ ๊ณํ ์ ๋ณด ์ ๊ณต Partition Pruning
- ํํฐ์ ํ ์ด๋ธ์์ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ์ ํ์ํ ํํฐ์ ๋ง ๊ณจ๋ผ๋ด๋ ๊ณผ์ ์ด๋ฉฐ, ์ ๊ทผํ ํํฐ์ ๋ชฉ๋ก์ด ์ด ์นผ๋ผ์ ํ์๋๋ค.
type ์ปฌ๋ผ (์ ๊ทผ ๋ฐฉ๋ฒ)
์ฑ๋ฅ์ด ๋น ๋ฅธ ์์
- system
- ๋ ์ฝ๋๊ฐ 0~1๊ฑด์ธ ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ ํํ์ ์ ๊ทผ ๋ฐฉ๋ฒ
- MyISAM, Memory ํ ์ด๋ธ์์๋ง ์ฌ์ฉ
- const
- PK๋ ์ ๋ํฌ ํค๋ก 1๊ฑด๋ง ์กฐํ (๋งค์ฐ ๋น ๋ฆ).
- eq_ref
- ์ฌ๋ฌ ํ ์ด๋ธ ์กฐ์ธ ์ ํ ์ด๋ธ์ PK๋ ์ ๋ํฌ ํค๋ก ๊ฒ์ ์กฐ๊ฑด์ ์ฌ์ฉํ ๋ ์ฌ์ฉ๋จ
- ref
- ์ธ๋ฑ์ค ์ข ๋ฅ์ ๊ด๊ณ์์ด ๋๋ฑ(Equal) ์กฐ๊ฑด ๊ฒ์
- eq_ref์ ๋ฌ๋ฆฌ ์กฐ์ธ์ ์์์ ๊ด๊ฒก๋ฒ๊ณ , PK๋ ์ ๋ํฌ ํค ๋ฑ์ ์ ์ฝ์กฐ๊ฑด๋ ์๋ค.
- fulltext
- ์ ๋ฌธ ๊ฒ์(Full-text Search) ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด ๋ ์ฝ๋๋ฅผ ์ฝ๋ ์ ๊ทผ ๋ฐฉ๋ฒ
- ref_or_null
- ref ๋ฐฉ์ ๋๋ NULL ๋น๊ต ์ ๊ทผ ๋ฐฉ๋ฒ
- unique_subquery
- WHERE ์กฐ๊ฑด์ ์์ ์ฌ์ฉ๋ ์ ์๋ IN ํํ์ ์ฟผ๋ฆฌ๋ฅผ ์ํ ์ ๊ทผ ๋ฐฉ๋ฒ
- index_subquery
- ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ์ค๋ณต๋ ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด์ ์ ๊ฑฐํ ์ ์์ ๋ ์ฌ์ฉ
- range
- ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ (
<,>,BETWEEN,IN,LIKE๋ฑ)
- ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ (
- index_merge
- 2๊ฐ ์ด์์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณํฉํด์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- index
- ์ธ๋ฑ์ค ํ ์ค์บ
- ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ ์ ๋ ฌ ์ต์ ํ ์ ์ฌ์ฉ๋จ.
- ALL
- ํ ํ ์ด๋ธ ์ค์บ (๊ฐ์ฅ ๋นํจ์จ์ )
possible_keys ์ปฌ๋ผ
- ์ฌ์ฉ ํ๋ณด์๋ ์ธ๋ฑ์ค ๋ชฉ๋ก (๋ฌด์ํด๋ ๋จ).
key ์ปฌ๋ผ
- ์ค์ ์คํ ๊ณํ์์ ์ ํ๋ ์ธ๋ฑ์ค.
key_len ์ปฌ๋ผ
- ์ธ๋ฑ์ค์ ๊ฐ ๋ ์ฝ๋์์ ๋ช ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋์ง ํ์
- ๋ค์ค ์นผ๋ผ ์ธ๋ฑ์ค์์ ๋ช ๋ฒ์งธ ์นผ๋ผ๊น์ง ์ฌ์ฉํ๋์ง ํ์ ๊ฐ๋ฅํ๋ค.
ref ์ปฌ๋ผ
- ์ ๊ทผ ๋ฐฉ๋ฒ์ด
ref์ผ ๋ ๋น๊ต ์กฐ๊ฑด์ผ๋ก ์ด๋ค ๊ฐ(์์, ์ปฌ๋ผ ๋ฑ)์ด ์ ๊ณต๋์๋์ง ๋ณด์ฌ์ค๋ค. func๋ผ๊ณ ๋์ค๋ฉด ๊ฐ์ด ๋ณํ/๊ฐ๊ณต๋ ๊ฒ์ด๋ค,.
rows ์ปฌ๋ผ
- ์ฟผ๋ฆฌ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฝ๊ณ ์ฒดํฌํด์ผ ํ ๊ฒ์ผ๋ก ์์ธก๋๋ ๋ ์ฝ๋ ๊ฑด์.
filtered ์ปฌ๋ผ
- ํํฐ๋ง๋๊ณ ๋จ์ ๋ ์ฝ๋์ ๋น์จ(%)
- ์ด ๊ฐ์ด ์ ํํ ์๋ก ์กฐ์ธ ์ฑ๋ฅ ์์ธก์ด ์ ํํด์ง๋ค.
Extra ์ปฌ๋ผ
- const row not found
- Deleting all rows
- Distinct
- FirstMatch
- Full scan on NULL key
- impossible HAVING
- impossible WHERE
- LosseScan
- No matching min/max rows
- no matching row in const table
- No matching rows after partition pruning
- No tables used
- Not exists
- Plan isnโt ready yet
- Range checked for each record (index map:N)
- Recursive
- Rematerialize
- Select tables optimized away
- Start temporary, End temporary
- Unique row not found
- Using filesort
- Using index(์ปค๋ฒ๋ง ์ธ๋ฑ์ค)
- Using index condition
- Using index for group-by
- Using index for skip scan
- Using join buffer(Block Nested Loop), Using join buffer (Batched Key Access), Using join buffer(hash join)
- Using MRR
- Using sort_union, Using union, Using intersect
- Using temporary
- Using where
- Zero limit
Extra
์คํ ๊ณํ์์ ์ฑ๋ฅ๊ณผ ๊ด๋ จ๋ ์ค์ํ ๋ด๋ถ ์ฒ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ด๋ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ์ปฌ๋ผ์ ๋๋ค.
- const row not found
const์ ๊ทผ ๋ฐฉ๋ฒ์ผ๋ก ํ ์ด๋ธ์ ์ฝ์์ผ๋, ์ค์ ๋ก ํด๋น ํ ์ด๋ธ์ ๋ ์ฝ๋๊ฐ 1๊ฑด๋ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ
- Deleting all rows
- MyISAM ์์ง ๋ฑ์์ WHERE ์ ์๋ DELETE ๋ฌธ ์คํ ์, ํธ๋ค๋ฌ ๊ธฐ๋ฅ์ ์ด์ฉํด ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ํ ๋ฒ์ ์ญ์ ํ์์ ์๋ฏธ
- Distinct
- ์กฐ์ธ ์ ํ์ํ ๋ ์ฝ๋๋ง ์ฝ๊ณ ์ค๋ณต๋ ๊ฐ์ ๋ฌด์ํ๋ฉฐ ์กฐํํ๋ ์ต์ ํ๋ฅผ ์ํ
- FirstMatch
- ์ธ๋ฏธ ์กฐ์ธ ์ต์ ํ ์ค FirstMatch ์ ๋ต์ ์ฌ์ฉํ์ฌ, ๊ธฐ์ค ํ ์ด๋ธ์ ๋ ์ฝ๋์ ๋ํด ์ผ์นํ๋ ์ฒซ ๋ฒ์งธ ๊ฑด๋ง ๊ฒ์ํ๊ณ ๋ฉ์ถค
- Full scan on NULL key
- IN ์๋ธ์ฟผ๋ฆฌ ์ฐ์ฐ ์ค ์ผ์ชฝ ํผ์ฐ์ฐ์๊ฐ NULL์ธ ๊ฒฝ์ฐ, ์ฐจ์ ์ฑ ์ผ๋ก ์๋ธ์ฟผ๋ฆฌ ํ ์ด๋ธ์ ๋ํด ํ ์ค์บ์ ์ํ
- Impossible HAVING
- ์ฟผ๋ฆฌ์ ์ฌ์ฉ๋ HAVING ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ์ฝ๋๊ฐ ์์ ๋(๋ถ๊ฐ๋ฅํ ์กฐ๊ฑด์ผ ๋) ํ์
- Impossible WHERE
- WHERE ์กฐ๊ฑด์ ์ด ํญ์ FALSE๊ฐ ๋์ด ์ฟผ๋ฆฌ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ ์ฝ๋๊ฐ ํ๋๋ ์์ ๋ ํ์
- LooseScan
- ์ธ๋ฏธ ์กฐ์ธ ์ต์ ํ ์ค LooseScan ์ ๋ต(์ธ๋ฑ์ค๋ฅผ ๋ฌ์ฑ๋ฌ์ฑ ์ฝ๋ ๋ฐฉ์)์ด ์ฌ์ฉ๋จ
- No matching min/max row
- MIN()์ด๋ MAX()์ ๊ฐ์ ์งํฉ ํจ์๊ฐ ์๋ ์ฟผ๋ฆฌ์ WHERE ์กฐ๊ฑด์ ์ ๋ง์กฑํ๋ ๋ ์ฝ๋๊ฐ ํ ๊ฑด๋ ์์ ๋ ํ์
- no matching row in const table
- ์กฐ์ธ์ ์ฌ์ฉ๋ ํ ์ด๋ธ์์ const ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํ์ผ๋ ์ผ์นํ๋ ๋ ์ฝ๋๊ฐ ์์
- No matching rows after partition pruning ย ย - ํํฐ์ ํ ์ด๋ธ์์ ํํฐ์ ํ๋ฃจ๋์ ์ํํ์ผ๋, ๋์ ํํฐ์ ์ ์ญ์ /์์ ํ ๋ ์ฝ๋๊ฐ ์์
- No tables used
ย ย ย ย - FROM ์ ์ด ์๊ฑฐ๋
FROM DUALํํ์ ์ฟผ๋ฆฌ๋ก, ์ค์ ํ ์ด๋ธ์ ์ฌ์ฉํ์ง ์์ - Not exists
- ์์ฐํฐ ์กฐ์ธ์ ์ด์ฉํด ์ํฐ-์กฐ์ธ(Anti-JOIN)์ ์ํํ ๋, ์ผ์นํ๋ ๋ ์ฝ๋๊ฐ ์กด์ฌํ๋ฉด ๋ ์ด์ ๊ฒ์ํ์ง ์๊ณ ์ข ๋ฃํ๋ ์ต์ ํ๋ฅผ ์ํ
- Plan isnโt ready yet
EXPLAIN FOR CONNECTION๋ช ๋ น ์คํ ์, ๋์ ์ปค๋ฅ์ ์์ ์์ง ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์๋ฆฝํ์ง ๋ชปํ ์ํ
- Range checked for each record (index map: N)
- ๋งค ๋ ์ฝ๋๋ง๋ค ์ธ๋ฑ์ค ์ฌ์ฉ ์ฌ๋ถ(๋ ์ธ์ง ์ค์บ vs ํ ์ค์บ)๋ฅผ ๋ค์ ๊ฒํ ํ์ฌ ์ฒ๋ฆฌ,
- Recursive
- WITH ๊ตฌ๋ฌธ์ ์ด์ฉํ ์ฌ๊ท CTE(Common Table Expression)๊ฐ ์ฌ์ฉ๋จ,
- Rematerialize
- ๋ํฐ๋ด ์กฐ์ธ ์ ์ ํ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ณ๋ก ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์คํํด ๊ฒฐ๊ณผ๋ฅผ ์์ ํ ์ด๋ธ์ ์๋ก ์ ์ฅ(๊ตฌ์ฒดํ)ํจ,
- Select tables optimized away
- MIN() ๋๋ MAX()๋ง ์กฐํํ๊ฑฐ๋ GROUP BY ์์ด COUNT(*)๋ฅผ ์กฐํํ๋(MyISAM) ์ฟผ๋ฆฌ๊ฐ ์ธ๋ฑ์ค๋ ๋ฉํ๋ฐ์ดํฐ๋ง์ผ๋ก ์ต์ ํ๋์ด ์ฒ๋ฆฌ๋จ
- Start temporary, End temporary
- ์ธ๋ฏธ ์กฐ์ธ์ Duplicate Weed-out ์ต์ ํ ์ ๋ต ์ฌ์ฉ ์ ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ํด ๋ด๋ถ ์์ ํ ์ด๋ธ ์ฌ์ฉ์ ์์๊ณผ ๋์ ์๋ฏธ
- unique row not found
- ๋ ํ ์ด๋ธ์ด ๊ฐ๊ฐ ์ ๋ํฌ(PK ํฌํจ) ์นผ๋ผ์ผ๋ก ์์ฐํฐ ์กฐ์ธ์ ์ํํ๋, ์์ฐํฐ ํ ์ด๋ธ์ ์ผ์นํ๋ ๋ ์ฝ๋๊ฐ ์์
- Using filesort
- ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ์ ๋ ฌ์ด ๋ถ๊ฐ๋ฅํ์ฌ, ์กฐํ๋ ๋ ์ฝ๋๋ฅผ ์ํธ ๋ฒํผ์ ๋ณต์ฌํด ๋ณ๋๋ก ์ ๋ ฌ ์์ ์ ์ํ
- Using index (์ปค๋ฒ๋ง ์ธ๋ฑ์ค)
- ๋ฐ์ดํฐ ํ์ผ์ ์ฝ์ง ์๊ณ ์ธ๋ฑ์ค๋ง ์ฝ์ด์ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์์,
- Using index condition
- MySQL ์ตํฐ๋ง์ด์ ๊ฐ ์ธ๋ฑ์ค ์ปจ๋์ ํธ์ ๋ค์ด(ICP) ์ต์ ํ๋ฅผ ์ฌ์ฉ
- Using index for group-by
- GROUP BY ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ณ๋์ ์ ๋ ฌ ์์ด ์ธ๋ฑ์ค๋ฅผ ์์๋๋ก ์ฝ๊ฑฐ๋ ๋ฌ์ฑ๋ฌ์ฑ ์ฝ๋ ๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ์ ์ฌ์ฉ
- Using index for skip scan
- ์ธ๋ฑ์ค ์คํต ์ค์บ ์ต์ ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค์ ์ ํ ์นผ๋ผ์ ๊ฑด๋๋ฐ๊ณ ๊ฒ์
- Using join buffer (Block Nested Loop / Batched Key Access / hash join)
- ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ์ ์ ํ ์ธ๋ฑ์ค๊ฐ ์์ด ์กฐ์ธ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ค์ ํ์๋ ์๊ณ ๋ฆฌ์ฆ(ํด์ ์กฐ์ธ ๋ฑ)์ผ๋ก ์ฒ๋ฆฌ๋จ,
- Using MRR
- ์ฌ๋ฌ ๊ฐ์ ํค ๊ฐ์ ํ ๋ฒ์ ์คํ ๋ฆฌ์ง ์์ง์ผ๋ก ์ ๋ฌํ๊ณ ์ ๋ ฌํ์ฌ ์ต์ํ์ ๋์คํฌ ์ ๊ทผ์ผ๋ก ์ฝ๋ MRR(Multi Range Read) ์ต์ ํ๋ฅผ ์ฌ์ฉ
- Using sort_union, Using union, Using intersect
index_merge์ ๊ทผ ๋ฐฉ๋ฒ ์ฌ์ฉ ์ ๋ ๊ฐ ์ด์์ ์ธ๋ฑ์ค ๊ฒฐ๊ณผ๋ฅผ ๋ณํฉ(ํฉ์งํฉ, ๊ต์งํฉ ๋ฑ)ํ๋ ์์ธ ๋ฐฉ์,
- Using temporary
- ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์ค ์ค๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ๋๊ธฐ ์ํด ์์ ํ ์ด๋ธ(๋ฉ๋ชจ๋ฆฌ ๋๋ ๋์คํฌ)์ ์ฌ์ฉ
- Using where
- ์คํ ๋ฆฌ์ง ์์ง์์ ์ฝ์ด์จ ๋ ์ฝ๋๋ฅผ MySQL ์์ง ๋ ์ด์ด์์ ๋ณ๋๋ก ํํฐ๋ง(์ฒดํฌ ์กฐ๊ฑด ์ฒ๋ฆฌ)ํจ,
- Zero limit
- ์ฟผ๋ฆฌ ๋ง์ง๋ง์
LIMIT 0์ด ์ฌ์ฉ๋์ด, ๋ฐ์ดํฐ ๊ฐ์ ์ฝ์ง ์๊ณ ๊ฒฐ๊ณผ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ๋ง ๋ฐํ
- ์ฟผ๋ฆฌ ๋ง์ง๋ง์