ํฐ์คํ ๋ฆฌ ๋ทฐ
MySQL ์คํ ๊ณํ ๋ถ์
๐ก ์คํ ๊ณํ์์ ํ์๋๋ ๊ฐ ์ปฌ๋ผ์ด ์ด๋ค ๊ฒ์ ์๋ฏธํ๋์ง ์์๋ณด์
๋ฉ๋ด์ผํ ์์
์ด๋ ๊ฐ๋ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํ์ธํ๊ณ ์ถ์ ๋ EXPLAIN ํค์๋๋ฅผ ํตํด MySQL ์คํ ๊ณํ์ ์ดํด๋ณด๊ฒ ๋๋๋ฐ,
๊ฐ ์นผ๋ผ์ ์๋ฏธ์ ๋ํด์๋ ๋ช
ํํ๊ฒ ์ ๋ฆฌํ๊ฑฐ๋ ์์๋ณธ ๊ฒฝํ์ด ์๋ ๊ฒ ๊ฐ์์ ์ด๋ฒ ๊ธฐํ์ ์ด๋ฅผ ์ ๋ฆฌํ๊ณ ์๊ธฐํฉ๋๋ค.
id ์นผ๋ผ
๐ก ID ์ปฌ๋ผ์ ๋จ์ํ SELECT ์ฟผ๋ฆฌ ์๋ฅผ ์๋ฏธํ๊ณ ํด๋น SELECT ์ฟผ๋ฆฌ๋ฅผ ์๋ณํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋จ.
- SELECT ์ฟผ๋ฆฌ ์๋ฅผ ์๋ฏธํ๋ฏ๋ก ๊ฐ์ ID๊ฐ ์ฌ๋ฌ๊ฐ ๋ณด์ผ ์๋ ์์
- *์ฟผ๋ฆฌ ์์๋ ์๋
EXPLAIN FORMAT=TREE SELECT
๋ช ๋ น์ผ๋ก ์ฟผ๋ฆฌ ์์ ํ์ธ ๊ฐ๋ฅ
select_type ์นผ๋ผ
๐ก SELECT ์ฟผ๋ฆฌ๊ฐ ์ด๋ค ํ์ ์ธ์ง ํ์๋๋ ์นผ๋ผ
๋ค์๊ณผ ๊ฐ์ ๊ฐ๋ค์ด ํ์๋ ์ ์์
SIMPLE
- UNINON์ด๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๋จ์ํ SELECT ์ฟผ๋ฆฌ์ธ ๊ฒฝ์ฐ
- ์ผ๋ฐ์ ์ผ๋ก ์ ์ผ ๋ฐ๊นฅ SELECT ์ฟผ๋ฆฌ์ select_type์ด SIMPLE
PRIMARY
- UNION์ด๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ง๋ SELECT ์ฟผ๋ฆฌ์ ๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ์ ์๋ ๋จ์ ์ฟผ๋ฆฌ๋ select_type์ด PRIMARY๋ก ํ์๋จ
- SIMPLE๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋๋ง ์กด์ฌ
UNION
- UNION์ผ๋ก ๊ฒฐํฉ๋ ์ฟผ๋ฆฌ์ ํ์
DEPENDENT
- ๋ด๋ถ ์ฟผ๋ฆฌ๊ฐ ์ธ๋ถ์ ๊ฐ์ ์ฐธ์กฐํด์ ์ฒ๋ฆฌ๋ ๋ ํ๊ธฐ
- e.g.
DEPENDENT UNION
,DEPENDENT SUBQUERY
- ์๋ ์์๋ UNION์ด ์๋ธ์ฟผ๋ฆฌ์ ์ํฅ์ ์ฃผ๋ฏ๋ก DEPENDENT๊ฐ ํ์๋ ๊ฑธ ํ์ธํ ์ ์์
UNION RESULT
- UNION ๊ฒฐ๊ณผ๋ฅผ ๋ด์๋ ์์ ํ ์ด๋ธ
- ์ค์ SELECT ์ฟผ๋ฆฌ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ID๊ฐ ํ์๋์ง ์์
SUBQUERY
- FROM ์ ์ด์ธ์์ ์ฌ์ฉ๋๋ ์๋ธ์ฟผ๋ฆฌ
- FROM ์ ์ ์ฌ์ฉ๋๋ ์๋ธ์ฟผ๋ฆฌ๋ ํ์ ํ
์ด๋ธ(
DERIVED
)๋ก ํ๊ธฐ๋จ
๐ ํ์ ํ ์ด๋ธ์ ์ผ๋ฐ์ ์ผ๋ก RDBMS์์๋ ์ธ๋ผ์ธ ๋ทฐ(Inline View) ๋๋ ์๋ธ ์ ๋ ํธ(Sub Select)๋ผ๊ณ ๋ถ๋ฆ.
DERIVED
- FROM ์ ์ ์ฌ์ฉ๋๋ ์๋ธ์ฟผ๋ฆฌ. ์ฆ, ํ์ ํ ์ด๋ธ์ ํ๊ธฐ
- MySQL 5.6 ๋ถํฐ ์์ ํ
์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ ๋ฑ ์ฑ๋ฅ ์ต์ ํ๊ฐ ๋ง์ด ์งํ๋์์ง๋ง ํ๊ณ๊ฐ ์๋ค๊ณ ํจ.
- ๊ฒฐ๊ตญ ์ต์ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ค์
UNCACHEABLE
- ์บ์ฑํ ์ ์์ ๋ ํ๊ธฐ๋๋ prefix
- ์๋ธ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋ฑ์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ๋ด๋ถ์ ์ธ ์บ์ ๊ณต๊ฐ์ ๋ด์๋๊ฒ ๋๋๋ฐ,
UNCACHEABLE
์ ์ด๊ฒ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ฅผ ๋ปํจ - e.g.
UNCACHEABLE SUBQUERY
,UNCACHEABLE UNION
- ์บ์๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๋ ๋ณ์, RAND ๋ฑ ํธ์ถํ ๋๋ง๋ค ๋ณ๋๋๋ ๊ฐ์ธ ๊ฒฝ์ฐ์
- ์๋๋ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌํ์ฉํ๋ ๊ตฌ์กฐ ์์
MATERIALIZED
- MySQL 5.7๋ฒ์ ๋ถํฐ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ์์ ํ ์ด๋ธ๋ก ์ต์ ํํ๋๋ฐ, ์ด ๊ฒฝ์ฐ์ ํ๊ธฐ๋๋ ํค์๋.
table ์นผ๋ผ
๐ก ์ฌ์ฉ๋๋ ํ ์ด๋ธ๋ช ํ๊ธฐ
<>
๋ก ๋๋ฌ์ธ์ธ ์ด๋ฆ์ ์์ ํ ์ด๋ธ<>
์์ ํญ์ ํ์๋๋ ์ซ์๋ SELECT ์ฟผ๋ฆฌ์ id ๊ฐ์ ์ง์นญ- e.g. <derived2> ์ธ ๊ฒฝ์ฐ id 2๋ฅผ ๊ฐ๋ฆฌํด
partitions ์นผ๋ผ
๐ก ์ ๊ทผํ ํํฐ์ ๋ชฉ๋ก ํ๊ธฐ
๋ค์ ์์๋ joined_date ์นผ๋ผ ๊ธฐ์ค์ผ๋ก p_2000, p_2001_2010 ํํฐ์ ์ ์กฐํํ๋ ์คํ ๊ณํ์ ์กฐํํ ๋ชจ์ต
๐ก ํํฐ์ ๋์์ผ๋ก ํ๋ ์ฟผ๋ฆฌ์์ type ์นผ๋ผ์ด ALL์ธ ๊ฒฝ์ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋๋ ํํฐ์ ๋ง ํ ์ค์บํ๊ฒ ๋๋ ์คํ ๊ณํ ํ๋จ์ ์ฃผ์
type ์นผ๋ผ์ ์๋์์ ์์๋ด ๋๋ค.
type ์นผ๋ผ
๋ค์๊ณผ ๊ฐ์ ๊ฐ์ด ํ๊ธฐ๋ ์ ์๊ณ ์์์๋ถํฐ ์ฑ๋ฅ์ด ๋น ๋ฅธ ์์
system
- ๋ ์ฝ๋๊ฐ 1๊ฑด๋ง ์กด์ฌํ๋ ํ ์ด๋ธ ๋๋ ํ ๊ฑด๋ ์กด์ฌํ์ง ์๋ ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ ํํ์ ์ ๊ทผ ๋ฐฉ๋ฒ
const
- ๋ฐ๋์ 1๊ฑด์ ๋ฐํํ๋ ์ฟผ๋ฆฌ์ ์ฒ๋ฆฌ ๋ฐฉ์
- ์ ๋ํฌ ์ธ๋ฑ์ค ์ค์บ์ด๋ผ๊ณ ๋ ํํํจ
- e.g. ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ ์ ๋ํฌ ํค ์นผ๋ผ์ ์ด์ฉํ๋ where ์กฐ๊ฑด์ ๊ฒฝ์ฐ
- ๋จ, ๋ค์ค ์นผ๋ผ์ผ๋ก ๊ตฌ์ฑ๋ ์ ๋ํฌ ํค์ ์ผ๋ถ ์นผ๋ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ const ํ์ ์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์์
eq_ref
- ์กฐ์ธ์์ ๋ ๋ฒ์งธ ์ดํ์ ์ฝ๋ ํ ์ด๋ธ์์ ๋ฐ๋์ 1๊ฑด๋ง ์กด์ฌํ๋ค๋ ๋ณด์ฅ์ด ์์ด์ผ ์ฌ์ฉํ ์ ์๋ ์ ๊ทผ ๋ฐฉ๋ฒ
- ์๋๋ PK๋ฅผ ์กฐ์ธ์ ์ฌ์ฉํ๋ ์์
ref
- ๋๋ฑ(Equal) ์กฐ๊ฑด์ผ๋ก ๊ฒ์ํ ๋ ref ์ ๊ทผ ๋ฐฉ๋ฒ์ด ํ์ฉ๋จ.
- ๋ฐํ๋๋ ๋ ์ฝ๋๊ฐ ๋ฐ๋์ 1๊ฑด์ด๋ผ๋ ๋ณด์ฅ์ด ์์ผ๋ฏ๋ก const๋ eq_ref๋ณด๋ค๋ ๋น ๋ฅด์ง ์์ง๋ง ๋๋ฑ ๋น๊ต์ด๋ฏ๋ก ๋งค์ฐ ๋น ๋ฅธ ๋ ์ฝ๋ ์กฐํ ๋ฐฉ๋ฒ
๐ก ๋๋ฑ ๋น๊ต ์ฐ์ฐ์๋ `=` ๋๋ `<=>` ์ ์๋ฏธํจ `<=>` ๋ NULL์ ๋ํ ๋น๊ต ๋ฐฉ์๋ง ์กฐ๊ธ ๋ค๋ฅผ ๋ฟ `=` ์ ๊ฐ์ ์ฐ์ฐ์
-
- ์ธ๋ฑ์ค์ ๋ถํฌ๋๊ฐ ๋์์ง ์๋ค๋ฉด ์ฑ๋ฅ์์ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์๋ ๋ฐฉ๋ฒ
fulltext
- MySQL ์๋ฒ์ ์ ๋ฌธ ๊ฒ์(Full-text Search) ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด ๋ ์ฝ๋๋ฅผ ์ฝ๋ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์๋ฏธ
- ์ ๋ฌธ ๊ฒ์ ์ธ๋ฑ์ค๊ฐ ํ
์ด๋ธ์ ์ ์๋์ด ์๋ ๊ฒฝ์ฐ + ์ ๋ฌธ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ(
MATCH (...) AGINST (...)
)
๐ก fulltext๋ณด๋ค ์ผ๋ฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ range ์ ๊ทผ ๋ฐฉ๋ฒ์ด ๋ ๋นจ๋ฆฌ ์ฒ๋ฆฌ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค๊ณ ํจ ๋ฐ๋ผ์ ์ ๋ฌธ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋๋ ์กฐ๊ฑด๋ณ๋ก ์ฑ๋ฅ์ ํ์ธํด ๋ณด๋ ํธ์ด ์ข๋ค.
ref_or_null
- ref ์ ๊ทผ ๋ฐฉ๋ฒ์ NULL ๋น๊ต๊ฐ ์ถ๊ฐ๋ ํํ
unique_subquery
- WHERE ์กฐ๊ฑด์ ์์ IN(subquery) ํํ์ ์ฟผ๋ฆฌ๋ฅผ ์ํ ์ ๊ทผ ๋ฐฉ๋ฒ
- ์๋ธ์ฟผ๋ฆฌ์์ ์ค๋ณต๋์ง ์๋ ์ ๋ํฌํ ๊ฐ๋ง ๋ฐํํ ๋ ์ด ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ฌ์ฉ
index_subquery
- IN(subquery) ํํ์์ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ค๋ณต๋ ๊ฐ์ ๋ฐํํ ์ ์์ง๋ง ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ์ค๋ณต์ ์ ๊ฑฐํ ์ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋๋ ์ ๊ทผ ๋ฐฉ๋ฒ
range
- ์ธ๋ฑ์ค์ ์ผ์ ๋ฒ์๋ฅผ ์ฝ๋
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
ํํ์ ์ ๊ทผ ๋ฐฉ๋ฒ
๐ก ์ฃผ๋ก `<`, `>`, `IS NULL`, `BETWEEN`, `IN`, `LIKE` ๋ฑ์ ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ํ ๋ ์ฌ์ฉ๋จ
- ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฟผ๋ฆฌ๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์ ๊ทผ ๋ฐฉ๋ฒ
๐ก ์ฐ๋ฆฌ๊ฐ ๋ณดํต “์ธ๋ฑ์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ค”๋ผ๊ณ ๋งํ ๋๋ const, ref, range ์ธ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ด์ผ๊ธฐํจ
- ๋ ์ฝ๋ ์์ ๋ฐ๋ผ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ์์ง๋ง range ์ ๊ทผ ๋ฐฉ๋ฒ๋ ์๋นํ ๋น ๋ฅธ ํธ
index_merge
- 2๊ฐ ์ด์์ ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ๊ฐ๊ฐ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณํฉ(merge)ํ๋ ๋ฐฉ์
- index_merge ์ ๊ทผ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ณด๋ฉด ์ด๋ฆ๋งํผ ๊ทธ๋ ๊ฒ ํจ์จ์ ์ผ๋ก ์๋ํ์ง ์์
- ์ฌ๋ฌ ์ธ๋ฑ์ค๋ฅผ ์ฝ์ด์ผ ํ๋ฏ๋ก range ์ ๊ทผ ๋ฐฉ๋ฒ๋ณด๋ค ํจ์จ์ฑ ๋ฎ์
- ์ ๋ฌธ ๊ฒ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ์์๋ index_merge๊ฐ ์ ์ฉ๋์ง ์์
- ํญ์ 2๊ฐ ์ด์์ ์งํฉ์ด ๊ฒฐ๊ณผ๋ก ๋์ค๋ฏ๋ก ์ค๋ณต ์ ๊ฑฐ์ ๊ฐ์ ๋ถ๊ฐ์ ์ธ ์์ ์ด ๋ ํ์
- index_merge ์ ๊ทผ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ๋ ๋๋ Extra ์นผ๋ผ์ ์ข ๋ ๋ถ๊ฐ์ ์ธ ์ค๋ช ์ด ํฌํจ๋จ
index
- ์ธ๋ฑ์ค๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ์ฝ๋
์ธ๋ฑ์ค ํ ์ค์บ
ํํ์ ์ ๊ทผ ๋ฐฉ๋ฒ
๐ก “ํจ์จ์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค”์ถ์ ์ด๋ฆ์ด์ง๋ง ์ฌ์ค ์ธ๋ฑ์ค ํ ์ค์บ์ ์๋ฏธํ๋ ์ฃผ์
ALL
ํ ํ ์ด๋ธ ์ค์บ
- ์ตํฐ๋ง์ด์ ๊ฐ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ ํํ๋ ๊ฐ์ฅ ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ
๐ก InnoDB๋ ๋ค๋ฅธ DBMS์ ๊ฐ์ด ๋๋์ ๋์คํฌ I/O๊ฐ ํ์ํ ์์ ์์ ํ๊บผ๋ฒ์ ๋ง์ ํ์ด์ง๋ฅผ ์ฝ์ด์ค๋ ๋ฆฌ๋ ์ดํค๋(Read Ahead) ๊ธฐ๋ฅ์ ์ ๊ณตํจ.
๋ฆฌ๋ ์ดํค๋(Read Ahead) : ์ธ์ ํ ํ์ด์ง๊ฐ ์ฐ์ํด์ ๋ช ๋ฒ ์ฝํ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์๋ํ๋ ์ฝ๊ธฐ ์ฐ๋ ๋๊ฐ ์ต๋ 64๊ฐ์ ํ์ด์ง์ฉ ํ๊บผ๋ฒ์ ๋์คํฌ๋ก๋ถํฐ ์ฝ์ด ๋ค์ด๋ ์๋ ๋ฐฉ์
์ผ๋ฐ์ ์ธ ์จ๋ผ์ธ ํธ๋์ญ์ ์ฒ๋ฆฌ ํ๊ฒฝ์ด ์๋๋ผ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค๋ ๋ฐฐ์น ํ๋ก๊ทธ๋จ์ฒ๋ผ ๋์ฉ๋์ ๋ ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ๋ ์์ ์์๋ ์ต์ง๋ก ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ฒ ํ๋ ๋ฑ์ ์๋ชป ํ๋๋ ์ฟผ๋ฆฌ๋ณด๋ค ์ํฉ์ ๋ฐ๋ผ ํ ํ ์ด๋ธ ์ค์บ์ด ๋ ๋์ ์ ๊ทผ ๋ฐฉ๋ฒ์ผ ์๋ ์์
์ฟผ๋ฆฌ๋ฅผ ํ๋ํ๋ค๋ ๊ฒ์ด ๋ฌด์กฐ๊ฑด ์ธ๋ฑ์ค ํ ์ค์บ์ด๋ ํ ์ด๋ธ ํ ์ค์บ์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ํ๋ ๊ฒ์ ์๋๋ผ๋ ์ ์ ๊ธฐ์ตํ์
possible_keys ์นผ๋ผ
๐ก ์ตํฐ๋ง์ด์ ๊ฐ ์ต์ ์ ์คํ ๊ณํ์ ๋ง๋ค๊ธฐ ์ํด ํ๋ณด๋ก ์ ์ ํ๋ ์ธ๋ฑ์ค์ ๋ชฉ๋ก
- = ์ฌ์ฉ๋ ๋ปํ ์ธ๋ฑ์ค ๋ชฉ๋ก.
- ์ค์ ์ฌ์ฉ๋ ์ธ๋ฑ์ค๊ฐ ์๋ ์ ์์ผ๋ ์ฃผ์
key ์นผ๋ผ
๐ก ์ต์ข ์ ํ๋ ์คํ ๊ณํ์์ ์ฌ์ฉํ๋ ์ธ๋ฑ์ค
key_len ์นผ๋ผ
๐ก ์ธ๋ฑ์ค์์ ๋ช ๋ฐ์ดํธ๊น์ง ์ฌ์ฉํ๋์ง ํ๊ธฐ.
๋ค์ค ์นผ๋ผ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ key_len ์นผ๋ผ ๊ฐ์ ํตํด ๋ช ๊ฐ์ ์นผ๋ผ๊น์ง ์ฌ์ฉํ๋์ง ์ ์ ์์!
ref ์นผ๋ผ
๐ก ์ฐธ์กฐ ์กฐ๊ฑด(Equal ๋น๊ต ์กฐ๊ฑด)์ผ๋ก ์ด๋ค ๊ฐ์ด ์ ๊ณต๋๋์ง ํ๊ธฐ
- ์์๊ฐ์ธ ๊ฒฝ์ฐ
const
- ๋ค๋ฅธ ํ
์ด๋ธ์ ์นผ๋ผ๊ฐ์ธ ๊ฒฝ์ฐ
๊ทธ ํ ์ด๋ธ ๋ช ๊ณผ ์นผ๋ผ ๋ช
์ด ํ๊ธฐ๋จ - ํ์
์ ๋ณํํด์ผ ํ๋ ๋ฑ MySQL ์๋ฒ๊ฐ ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ ๋ณํํด์ผ ํ ๋๋
func
๊ฐ ํ๊ธฐ ๋จ
์๋ ์ฌ์ง์ ref ์์
rows ์นผ๋ผ
๐ก ์ตํฐ๋ง์ด์ ๊ฐ ์คํ ๊ณํ์์ ์์ธกํ๋ `์ฝ์ด์ผํ ๋ ์ฝ๋ ๊ฑด์`๋ฅผ ํ๊ธฐ
- ๋ ์ฝ๋ ๊ฑด์ ์์ธก์น๊ฐ ์๋๋ผ ํด๋น ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ผ๋ง๋ ๋ง์ ๋ ์ฝ๋๋ฅผ ์ฝ๊ณ ์ฒดํฌํด์ผ ํ๋์ง๋ฅผ ์๋ฏธํ๋ ์ฃผ์
- ์ตํฐ๋ง์ด์ ๊ฐ ์ฐ์ถํด ๋ธ ์์ ๊ฐ์ผ๋ก ์ ํํ์ง ์์ ์ ์์
filtered ์นผ๋ผ
๐ก ์ตํฐ๋ง์ด์ ๊ฐ ์์ธกํ ๊ฐ์ผ๋ก, rows ์นผ๋ผ์ ํ๊ธฐ๋๋ ๋ ์ฝ๋ ์์์ ํํฐ๋ง๋์ด ์ค์ ์ฌ์ฉ๋ ๊ฑธ๋ก ์์ธก๋๋ ๋ ์ฝ๋ ๊ฑด์์ ๋น์จ ํ๊ธฐ
- e.g. rows 233์ filtered ๊ฐ์ด 16.03์ด๋ฉด, 37(=233 * 0.1603) ๊ฑด ์ ๋ ์ฌ์ฉ๋ ๊ฑธ๋ก ์์ธกํ๋ค๋ ์๋ฏธ
- ์ตํฐ๋ง์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ฎ์ถ๊ธฐ ์ํด ๋์ ๊ฑด์๊ฐ ์ ์ ํ
์ด๋ธ์ ์ ํํ ๊ฐ๋ฅ์ฑ์ด ๋์
๊ทธ๋์ filtered ์นผ๋ผ์ ํ์๋๋ ๊ฐ์ด ์ผ๋ง๋ ์ ํํ ์์ธก๋ ์ ์๋๋๋ ์ค์.
Extra ์นผ๋ผ
๐ก ์ด๋ฆ๊ณผ ๋ฌ๋ฆฌ ์คํ ๊ณํ์์ ์ฑ๋ฅ๊ณผ ๊ด๋ จ๋ ์ค์ํ ๋ด์ฉ์ด Extra ์นผ๋ผ์ ์์ฃผ ํ๊ธฐ๋๊ณ ์ฃผ๋ก ๋ด๋ถ์ ์ธ ์ฒ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์กฐ๊ธ ๋ ๊น์ด ์๋ ๋ด์ฉ์ ๋ณด์ฌ์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
๋ค์ํ ๋ด์ฉ์ด ํ๊ธฐ๋๋ฏ๋ก ๋งค๋ด์ผ์ ์ฐธ๊ณ ํ๊ณ ๋ช ๊ฐ๋ง ์์๋ณด์
Using filesort
- ORDER BY ์ฒ๋ฆฌ๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ ๋ ํ๊ธฐ๋จ
- ์กฐํ๋ ๋ ์ฝ๋๋ฅผ ์ ๋ ฌ์ฉ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ๋ณต์ฌํด ์ ๋ ฌ์ ์ํํ๋ค๋ ์๋ฏธ
- Using filesort๋ ๋ง์ ๋ถํ๋ฅผ ์ผ์ผํค๋ฏ๋ก ๊ฐ๋ฅํ๋ค๋ฉด ์ฟผ๋ฆฌ ํ๋ ํน์ ์ธ๋ฑ์ค ์์ฑ์ด ํ์
Using index
- ์ธ๋ฑ์ค๋ง ์ฝ์ด์ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์์ ๋ ํ๊ธฐ
- = ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
Using index condition
- ์ตํฐ๋ง์ด์ ๊ฐ
์ธ๋ฑ์ค ์ปจ๋์ ํธ์ ๋ค์ด(Index condition pushdown) ์ต์ ํ
๋ฅผ ์ฌ์ฉํ๋ฉด ํ๊ธฐ
๐ก ์ธ๋ฑ์ค๋ฅผ ๋น๊ตํ๋ ๊ฑด InnoDB ์คํ ๋ฆฌ์ง ์์ง์์ ์ํํ์ง๋ง ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ๋น๊ตํ๋ ๊ฑด MySQL ์์ง์ด ์ํํ๋ ์์ ์ผ๋ก ์ํ ์ฃผ์ฒด๊ฐ ๋ค๋ฆ.
์ธ๋ฑ์ค์ ๋ํ ์ ๋ณด๋ MySQL ์์ง์ ์ ์ ์์ผ๋ฏ๋ก ์ธ๋ฑ์ค์ ์กฐํํ๋ ์นผ๋ผ์ด ์์ด์ ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๊ฐ ๊ฐ๋ฅํ ์ํฉ์์๋ ํ ์ด๋ธ ๋ ์ฝ๋๋ฅผ ํ ๋ฒ ๋ ์กฐํํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์์ํ์ง๋ง ์ธ๋ฑ์ค ์กฐ๊ฑด์ InnoDB ์คํ ๋ฆฌ์ง ์์ง์์ MySQL ์์ง์ผ๋ก pushdown ํด์ฃผ๋ฉด ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ์ ์ ์์ผ๋ฏ๋ก ํ ์ด๋ธ ๋ ์ฝ๋๋ฅผ ์กฐํํ์ง ์์๋ ๋จ
์ด๋ฅผ ์ธ๋ฑ์ค ์ปจ๋์ ํธ์ ๋ค์ด(Index condition pushdown)์ด๋ผ๊ณ ํจ.
์ธ๋ฑ์ค ์ปจ๋์ ํธ์ ๋ค์ด์ MySQL 5.6 ๋ถํฐ ์ง์ํจ
์ํคํ ์ฒ ๊ตฌ์กฐ๋ ์๋ ์ด๋ฏธ์ง ์ฐธ๊ณ .
Using where
- MySQL ์์ง์์ ์คํ ๋ฆฌ์ง ์์ง์์ ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋์ ๊ฐ๊ณต ์ฒ๋ฆฌํ๊ณ ํํฐ๋งํ ๊ฒฝ์ฐ
๐ก Using where๊ฐ ์ฑ๋ฅ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ์ง ์๋์ง๋ฅผ ์ ์ ํ๊ฒ ์ ๋ณํ๋ ๊ฒ ์ด ์ค์ํ๋ฐ, MySQL 8.0๋ถํฐ๋ filtered ์นผ๋ผ ๊ฐ์ ํ์ธ ๊ฐ๋ฅํ๊ณ filterd ๊ฐ์ด ์์ ๊ฒฝ์ฐ(=filter๋์ด ๋จ๋ ๋ฐ์ดํฐ์ ๋น์จ์ด ์ ์ ๊ฒฝ์ฐ)๋ฅผ ํ์ธํ๋ฉด ํ๋จ์ด ๊ฐ๋ฅํจ
filtered ์นผ๋ผ ๊ฐ์ด ๊ฝค ์๋ค๊ณ ํ๋จ๋๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํด ์ต์ ํ๋ฅผ ์งํํด๋ณผ ์ ์์
Reference
- Real MySQL 8.0
๋ฐ์ํ
'BackEnd' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Zero Copy๋ฅผ ์์๋์? with kotlin S3 upload (1) | 2024.11.24 |
---|---|
์ฐ๋ฆฌ ์๋ฒ์ OOMKilled ์ฅ์ ๊ฐ ๋ฐ์ํ์ด์ - ํ๊ณ ํธ (0) | 2024.11.10 |
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค(isolation level)์ด๋? (0) | 2024.03.03 |
AWS Elastic Beanstalk ๋จ์ผ ์ธ์คํด์ค ๋ฌด์ค๋จ ๋ฐฐํฌํ๊ธฐ (0) | 2023.10.08 |
์์ฆ ๋ ์ค๋ฅด๋ gRPC ํบ์๋ณด๊ธฐ (2) | 2022.12.04 |
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
TAG
- ์ข์ ์ฝ๋๋ ๋ฌด์์ธ๊ฐ?
- golang oomkilled
- ์ข์ ๊ฐ๋ฐ์
- Golang
- ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค
- ์ข์ ๊ฐ๋ฐ์ ๋๊ธฐ
- Aws Reinvent 2023
- ๋ฑ ํฌ์๋ฌ๋ ๊ฐ๋ฐ์
- 2๋ ์ฐจ ์๋ฒ ๊ฐ๋ฐ์
- ์๊ณ ๋ฆฌ์ฆ
- kotlin s3 upload
- ์ถ์ ์ง๋
- ์ฝ๋ฉํ ์คํธ
- rate limit
- mysql ์คํ ๊ณํ
- ํด์
- Go
- grpc client
- ๊น์ด/๋๋น ์ฐ์ ํ์(DFS/BFS)
- ์ฅ์ ํ๊ณ
- 2023 ๊ฐ๋ฐ์ ํ๊ณ
- mysql
- ํ(Heap)
- ์ข์ ์์ง๋์ด
- AWS re:Invent 2023
- 2023 ํ๊ณ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฐฑ์ค
- ์คํ/ํ
- HTTP
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
๊ธ ๋ณด๊ดํจ