0. ํ์ต ๋ชฉ์
- ์ธ๋ฑ์ค ์ปจ๋์ ํธ์๋ค์ด์ ์ ์๋ฅผ ์ดํดํ๋ค.
- ์ธ๋ฑ์ค ์ปจ๋์ ํธ์๋ค์ด์ด ํ์ฑํ๋์์ ๋์ ๋นํ์ฑํ ๋์์ ๋, ์คํ ๊ณํ์ด ์ด๋ป๊ฒ ๋ฐ๋๋์ง ์ดํดํ๋ค.
1. ์ธ๋ฑ์ค ์ปจ๋์ ํธ์ ๋ค์ด์ด๋?
Index Condition Pushdwon
(์ดํ ICP) ๋ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ฟผ๋ฆฌ๋ฌธ์์ ์ฌ์ฉํ๋ ์ต์ ํ ์ ๋ต์ด๋ค.
๋ค์๊ณผ ๊ฐ์ด ์งํ๋๋ ์ต์ ํ๋ฅผ ICP๋ผ๊ณ ํ๋ค.
- ์ตํฐ๋ง์ด์ ๊ฐ '๋ฒ์๋ฅผ ์ค์ผ ์ ์๋ ์กฐ๊ฑด ์ปฌ๋ผ์ด๋๋ผ๋' ๋ณด์กฐ ์ธ๋ฑ์ค์ ๊ตฌ์ฑ ์์๋ก ์กด์ฌํ๋ ์ปฌ๋ผ์ด๋ฉด, ์คํ ๋ฆฌ์ง ์์ง์๊ฒ ์ ๋ถ ์ ๋ฌํด์ค๋ค.
- ์คํ ๋ฆฌ์ง ์์ง์ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ํ์ํ ๋, ์ตํฐ๋ง์ด์ ์๊ฒ ๋ฐ์ ์กฐ๊ฑด ์ปฌ๋ผ๋ค๋ก ์ต๋ํ ์ ํจํ์ง ์์ ํํ๋ค์ ๊ฑธ๋ฌ๋ธ๋ค.
- ์ด๋ฅผ ํตํด ์คํ ๋ฆฌ์ง ์์ง์ด ๋ณธ ํ ์ด๋ธ์ ์ฝ๋ ํ์๋ฅผ ์ค์ธ๋ค.
[!info] MySQL ์์ง๊ณผ ์คํ ๋ฆฌ์ง ์์ง์ ๋ด๋น ์ ๋ฌด
MySQL์์ง
์ ์ตํฐ๋ง์ด์ ๋ฅผ ์ด์ฉํ ์คํ ๊ณํ์ ์ธ์ฐ๊ธฐ๋ ํ์ง๋ง, ์คํ ๋ฆฌ์ง ์์ง์ด ์ฝ์ด๋ค์ธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ฌ๊ฐ๊ณต ํ๋ ์์ ๋ ํจ๊ป ์งํํ๋ค. (์ฌ๊ฐ๊ณต์๋ where ์ ๋น๊ต, Order by, Group By ์ฒ๋ฆฌ ๋ฑ์ด ์๋ค.)์คํ ๋ฆฌ์ง ์์ง
์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํด ์ ํจํ์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฑธ๋ฌ๋ด๊ณ ๋ณธ ํ ์ด๋ธ์์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ์์ ์ ๋ด๋นํ๋ค.
2. ICP์ ์กด์ฌ ์ ๋ฌด์ ๋ฐ๋ฅธ ์ฟผ๋ฆฌ ์คํ ์ฐจ์ด ๋น๊ต
(0) ์ธํ
๋ค์๊ณผ ๊ฐ์ ํ ์ด๋ธ์ด ์กด์ฌํ๊ณ , ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ค๊ณ ํ์.
CREATE TABLE emplyoees (
emp_no int (PRIMARY),
last_name VARCHAR(20),
first_name VARCHAR(20),
hire_date DATE
INDEX idx_last_name_first_name (last_name, first_name);
)engine='innodb'
SELECT * FROM emplyees WHERE last_name='์ ' AND first_name LIKE '%์ผ'
ํด๋น ์ฟผ๋ฆฌ๋ฌธ์ last_name์ผ๋ก ํ์ ๋ฒ์๋ฅผ ์ค์ผ ์ ์์ผ๋ฏ๋ก, (last_name, first_name)
๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ๊ฒ์ด๋ค. ๋ค๋ง, first_name ๋ถ๋ถ์ ์ปฌ๋ผ ๊ฐ์ ๋ค์ชฝ์ ๋ํ ์กฐ๊ฑด์ด๋ผ ๋ฒ์ ์ ํ ์ฉ๋๋ก ์ธ ์๊ฐ ์์ ๊ฒ์ด๋ค.
(1) ICP๊ฐ ๋นํ์ฑํ ๋ ์ํฉ
ICP๊ฐ ๋นํ์ฑํ ๋๋ฉด, ๋ค์๊ณผ ๊ฐ์ด MySQL ์์ง์ด ํ๋ํ๋ค.
- ์คํ ๋ฆฌ์ง ์์ง์ ์ธ๋ฑ์ค ๋น๊ต๋ก ๋ฒ์ ์ค์ด๊ธฐ ๋ฐ ๋ฐ์ดํฐ ์ฝ๊ธฐ๋ฅผ ํ๋ ์น๊ตฌ๋๊น, ์ค๋ก์ง '์ธ๋ฑ์ค๋ก ๋ฒ์๋ฅผ ์ค์ผ ์ ์๋ ์กฐ๊ฑด ์ปฌ๋ผ๋ง' ์ ์กํ๋ค.
- ์คํ ๋ฆฌ์ง์์ง์ ๋ฐ์ ์กฐ๊ฑด ์ปฌ๋ผ์ผ๋ก๋ง ์ธ๋ฑ์ค ํํฐ๋ง์ ๊ฑฐ์น๊ณ ์ดํ ์ ํจํ ํํ ๋ชจ๋ ๋ณธ ํ ์ด๋ธ ์ฝ๊ธฐ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- MySQL ์์ง์ด ๋ฐ์ดํฐ๋ค์ ๋ฐ์์ Where ์กฐ๊ฑด๋ฌธ ํ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ค.
์์์ ์ค์ ํ ์์์ผ ๊ฒฝ์ฐ, last_name
์กฐ๊ฑด์ ์คํ ๋ฆฌ์ง ์์ง์๊ฒ ์ ๋ฌ๋์ง๋ง, first_name
์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค์์ ์กฐ๊ฑด ํํฐ๋ง์ ์ธ ์ ์์์๋ ๋ฒ์๋ฅผ ์ค์ผ ์ ์๋ ์กฐ๊ฑด์ด ์๋๊ธฐ ๋๋ฌธ์ ์ ๋ฌ ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์คํ ๋ฆฌ์ง ์์ง์ last_name์ผ๋ก๋ง ๋ฒ์๋ฅผ ์ค์ธ ๋ค์ ๋จ๋ ๋ชจ๋ ํํ์ ๋ํด ๋ณธ ํ
์ด๋ธ ์ฝ๊ธฐ๋ฅผ ์งํํ๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๋ถํ์ํ ๋ณธ ํ
์ด๋ธ ์ฝ๊ธฐ๊ฐ ๋์ด๋๋ค. ์์์์๋ 3๊ฐ ์ค 2๊ฐ์ด์ง๋ง, ๋ง์ฝ 10๋ง๋ช
์ค ์ฑ์ด ์
์ด๊ณ ์ด๋ฆ์ด ์ผ
๋ก ๋๋๋ ์ฌ๋์ด 1๋ช
์ด๋ผ๋ฉด 99,999 ๊ฐ์ ํ์ ์๋ ๋ ์ฝ๋๋ฅผ ์ฝ๋ ํ์๊ฐ ๋๋ค.
[!info] ์คํ ๊ณํ ์ ํ์
ICP๊ฐ ์๋ํ์ง ์์ ์ฑ MySQL์์ง์์ Where ๋ฌธ์ ๋ํ ํ์ฒ๋ฆฌ ์์ ์ ํ๋ค๋ฉด ์คํ ๊ณํ์ Extra ๋ถ๋ถ์Using Where
๋ผ๊ณ ํ์๋๋ค.
Using Where
๋ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์ ์๋ Where ์กฐ๊ฑด๋ฌธ์ ๋ํ์ฌ MySQL์์ง์ด ์คํ ๋ฆฌ์ง ์์ง์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ํ์ ์ผ๊ด Where ํ์ฒ๋ฆฌ ์์ ์ ์งํํ์ ์ ํ์๋๋ค.
(2) ICP๊ฐ ํ์ฉ๋๋ ์ํฉ
ICP ์ต์ ํ ์ ๋ต์ ๋ฒ์๋ฅผ ์ ํํ ์ ์๋ ์กฐ๊ฑด ์ปฌ๋ผ์ด๋๋ผ๋ ๋ณด์กฐ ์ธ๋ฑ์ค์ ์กด์ฌํ๋ฉด ์คํ ๋ฆฌ์ง ์์ง์ ํจ๊ป ์ ๋ฌํ๋ค.
๋ฐ๋ผ์ ์์ ์์์์๋ ์คํ ๋ฆฌ์ง ์์ง์ด ์ธ๋ฑ์ค ๋น๊ต ๊ณผ์ ์ ๊ฑฐ์น ๋ last_name ๋ฟ๋ง ์๋๋ผ first_name์ผ๋ก๋ ์ ํจํ์ง ์์ ํํ ํํฐ๋ง ์์ ์ ํ ์ ์๋ค.
[!info] ์คํ ๊ณํ ์ ํ์
ICP ๋ฅผ ํ์ฉํ๋ค๋ฉด, Extra ๋ถ๋ถ์Using index Condition
์ด๋ผ๊ณ ํ์ ๋๋ค.
3. ํต์ฌ ์์ฝ
- ์ธ๋ฑ์ค ์ปจ๋์ ํธ์ ๋ค์ด์ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํด์ผ ํ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์ต์ ํํ๋ ์ ๋ต์ด๋ค.
- ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ์ค์ผ ์ ์๋ ์กฐ๊ฑด ์ปฌ๋ผ์ด๋๋ผ๋ ๋ณด์กฐ ์ธ๋ฑ์ค์ ์กด์ฌํ๋ค๋ฉด ์คํ ๋ฆฌ์ง ์์ง์๊ฒ ์ ๋ถ ์๋ ค์ฃผ์ด, ์คํ ๋ฆฌ์ง ์์ง์ด ์ต๋ํ ์ ํจํ์ง ์์ ํํ์ ํํฐ๋ง์ ํ์ฌ ๋ณธ ํ ์ด๋ธ์ ์ ๊ทผํ๋ ํ์๋ฅผ ์ค์ด๊ฒ ๋ง๋๋ ์ต์ ํ ์ ๋ต์ด๋ค.