2023. 12. 31. 19:15ใDatabase/DB ์คํฐ๋
๋ค์ํ ๋ฐ์ดํฐ์ ์ ๊ทผ ํํ์ ์ผ์ผ์ด ๋์ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๋ง์ด ๋ง๋ค ์ ์๋ ํ๊ฒฝ์ด๋ผ๋ฉด ์ธ๋ฑ์ค ์์ฑ์ ์์ด ๊ณ ๋ฏผ์ ์ฌ์ง๊ฐ ์ ๊ฒ ์ง๋ง, ์์ฝ๊ฒ๋ ์ธ๋ฑ์ค๊ฐ ๋ง์์ง๋ฉด ๋ง์์ง์๋ก ๊ทธ์ ๋ฐ๋ฅธ ์ฌ์ด๋ ์ดํํธ(DML ์ฑ๋ฅ ์ ํ, ์ ์ฅ ๊ณต๊ฐ ์ฐจ์ง)๊ฐ ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ์ ์ ์์ ์ธ๋ฑ์ค๋ฅผ ์ ์งํ๋ ๋์์ ๋ค์ํ ๋ฐ์ดํฐ ์ ๊ทผ ํํ์ ๋ํด ์ธ๋ฑ์ค ์ค์บ์ ์ง์ํ๋ ๊ฒ์ ์ค์ํ๋ค.
์ด๋ฅผ ์ํด์๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ธฐ๋ฐ์ผ๋ก ํ๋์ ์ธ๋ฑ์ค๊ฐ ์ฌ๋ฌ ์ํฉ์ ์ปค๋ฒํ ์ ์๋๋ก ํ ์ด๋ธ ์ค๊ณ๊ฐ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
ํด๋น ๊ธ์์๋ ์ด๋ฅผ ๋๊ธฐ ์ํด ๋ณตํฉ ์ธ๋ฑ์ค๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์๋ํ๋์ง ์์๋ณด๊ณ , ๋ณตํฉ ์ธ๋ฑ์ค๊ฐ ์๋ํ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด ๋ค๋ค๋ณด๋ ค๊ณ ํ๋ค.
์ด ๊ธ์ Mysql ๊ธฐ์ค์ผ๋ก ์์ฑ๋์๋ค.
๋ณตํฉ ์ธ๋ฑ์ค ์๋ ๋ฐฉ์
๋ณตํฉ ์ธ๋ฑ์ค๋ ๋ ์ด์์ ์นผ๋ผ์ ํตํด ์์ฑํ ์ธ๋ฑ์ค๋ฅผ ์๋ฏธํ๋ค. ์ด๋ฅผ ์์ฑํ๋ ๋ฒ์ ์๋์ ๊ฐ๋ค.
# Mysql ๊ธฐ์ค
CREATE INDEX {์ธ๋ฑ์ค ๋ช
} ON {ํ
์ด๋ธ ๋ช
} (col1, ...);
์ด๋ ๊ฒ ์์ฑํ ๋ณตํฉ ์ธ๋ฑ์ค๋ ์ฟผ๋ฆฌ ์คํ ์ ์ด๋ค ์์ผ๋ก ์๋ํ ๊น?
์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๋จผ์ ์ธ๋ฑ์ค ์ก์ธ์ค ์กฐ๊ฑด๊ณผ ์ธ๋ฑ์ค ํํฐ๋ง ์กฐ๊ฑด์ ๋ํด ์ดํดํด์ผ ํ๋ค.
์ธ๋ฑ์ค ์ก์ธ์ค ์กฐ๊ฑด์ ๊ฒฝ์ฐ B Tree ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ง์ ํ์์ ํ๋๋ฐ ํ์ฉ์ด ๋๋ค. ๋ฐ๋ฉด ์ธ๋ฑ์ค ํํฐ๋ง ์กฐ๊ฑด์ ์์ง์ ํ์์ด ์๋ฃ๋ ํ ๋ฆฌํ ๋ ธ๋๋ฅผ ์ํํ ๋ ํ์ฉ๋๋ค.
์ค์ง์ ์ธ B ํธ๋ฆฌ ํ์ ๋ฒ์๋ ์์ง์ ํ์์ ํตํด ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ์ต๋ํ ๋ง์ ์นผ๋ผ์ด ์ธ๋ฑ์ค ์ก์ธ์ค ์กฐ๊ฑด์ผ๋ก ํ์ฉ๋๋๋ก ์ ๋ํด์ผ ๋ถํ์ํ ํ ์ด๋ธ ๋๋ค ์ก์ธ์ค๋ฅผ ์ต์ํํ ์ ์๋ค.
์ ์ดํด๋ฅผ ๋ฐํ์ผ๋ก ์ ๋ฆฌํ ๋ณตํฉ ์ธ๋ฑ์ค์ ์ธ๋ฑ์ค ์ค์บ ํ์ฉ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ธ๋ฑ์ค ์ ๋ ์นผ๋ผ๋ถํฐ ์์ํด์, ์กฐ๊ฑด์ ์ ๋ฑํธ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ ์นผ๋ผ๋ค์ ๋ชจ๋ ์ธ๋ฑ์ค ์์ธ์ค ์กฐ๊ฑด์ผ๋ก ํ์ฉ๋๋ค.
- ๋ง์ฝ ์์ ๊ฐ์ ์ํฉ์์ ์ฒ์ ๋ฒ์ ํ์ ์กฐ๊ฑด์ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ, ํด๋น ์กฐ๊ฑด๊น์ง๋ง ์ธ๋ฑ์ค ์์ธ์ค ์กฐ๊ฑด์ผ๋ก ํ์ฉํ๊ณ ๊ทธ ์ดํ์ ์ธ๋ฑ์ค ์กด์ฌ ์นผ๋ผ ์กฐ๊ฑด์ ์ ๋ํด์๋ ๋ชจ๋ ์ธ๋ฑ์ค ํํฐ ์กฐ๊ฑด์ผ๋ก ํ์ฉ๋๋ค.
- ๊ทธ ํ ์ธ๋ฑ์ค ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋์ง ์์ ์กฐ๊ฑด์ ์ ํ ์ด๋ธ ํํฐ ์กฐ๊ฑด์ผ๋ก ํ์ฉ๋๋ค.
- ๋ณตํฉ ์ธ๋ฑ์ค ๋ด ๋ชจ๋ ์นผ๋ผ์ ํ์ฉํ์ง ์๋๋ผ๋, ์ ๋์นผ๋ผ๋ถํฐ ์ด์ด์ง๋ ์นผ๋ผ ๊ตฌ์ฑ์ด ์กฐ๊ฑด์ ์ ํฌํจ๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ ํ์ฉ๋ ์ ์๋ค.
- ํต๋ ๊ณผ๋ ๋ค๋ฅด๊ฒ, ์ธ๋ฑ์ค ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์ ์นผ๋ผ์ ๋ณตํฉ ์ธ๋ฑ์ค ์์ชฝ์ ๋ฐฐ์นํ๋ค๊ณ ํด์ ์ธ๋ฑ์ค ์ค์บ ์ ๋ ํจ์จ์ ์ธ ๊ฒ์ ์๋๋ค. ์ธ๋ฑ์ค ์๋ฃ๊ตฌ์กฐ๋ 2์ฐจ์ ํ ์ด๋ธ ํํ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ์์ฐจ์ ์ผ๋ก ํ์ธํ์ง ์๊ณ ํ๋ฒ์ ๋ชฉ์ ์ง๋ฅผ ํฅํด ๊ฐ๊ธฐ ๋๋ฌธ์ ์ด๋ ์๋ฏธ์๋ ๊ณ ๋ ค์ด๋ค.
๋ณตํฉ์ธ๋ฑ์ค ์๋ ๊ฒฝ์ฐ์ ์
์ด์ ์์์ ์์ ํ ๋ณตํฉ ์ธ๋ฑ์ค์ ์ดํด๋ฅผ ํ ๋๋ก ์ธ๋ฑ์ค๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋ ๊ฒฝ์ฐ์ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ค์ ์ง์ ํ์ธํด๋ณด๊ฒ ๋ค.
์ด๋ฅผ ์ํด Mysql ์๋ฒ์ ์๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ฌ ํ ์ด๋ธ์ ์์ฑํด์ฃผ๊ณ ์ด์ ๋ชฉ ๋ฐ์ดํฐ๋ฅผ 50000๊ฐ ์ฑ์๋ฃ์๋ค.
CREATE TABLE test_table (
id INT NOT NULL AUTO_INCREMENT,
a INT NOT NULL,
b INT NOT NULL,
c INT NOT NULL,
d INT NOT NULL,
e INT NOT NULL,
PRIMARY KEY (id)
);
๋ํ ํ ์คํธ ์ฉ ๋ณตํฉ ์ธ๋ฑ์ค๋ฅผ ์๋์ ๊ฐ์ด ๊ตฌ์ฑํ๋ค.
CREATE INDEX test_idx ON test_table (a, b, c, d);
ํ์ธํด๋ณผ ๊ฒฝ์ฐ์ ์๋ ์๋์ ๊ฐ๋ค.
- ์กฐ๊ฑด์์ ๋ชจ๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ์ด ํฌํจ๋๋ ๊ฒฝ์ฐ
- ์กฐ๊ฑด์์ ๋ณตํฉ ์ธ๋ฑ์ค ์นผ๋ผ์ด ์ผ๋ถ๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ (์ ๋ ์นผ๋ผ๋ถํฐ ์ฐ์์ )
- ์กฐ๊ฑด์์ ๋ณตํฉ ์ธ๋ฑ์ค ์นผ๋ผ์ด ์ผ๋ถ๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ (์ ๋ ์นผ๋ผ ํฌํจ X)
- ์กฐ๊ฑด์์ ๋ณตํฉ ์ธ๋ฑ์ค ์นผ๋ผ์ด ์ผ๋ถ๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ (์ ๋ ์นผ๋ผ์ ํฌํจ๋๋ ์ค๊ฐ์ ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ ๊ฒฝ์ฐ)
- ์กฐ๊ฑด์์ ๋ชจ๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ์ด ํฌํจ๋๋, ์ค๊ฐ์ ๋ฒ์ ํ์ ์กฐ๊ฑด์ ์ฌ์ฉํ ๊ฒฝ์ฐ
- ์กฐ๊ฑด์ + ORDER BY ์ ์ ์นผ๋ผ๋ค์ด ๋ชจ๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ์ ํฌํจ๋๋ ๊ฒฝ์ฐ (์กฐ๊ฑด์ -> ORDER BY ์ ์์)
- ์กฐ๊ฑด์ + ORDER BY ์ ์ ์นผ๋ผ๋ค์ด ๋ชจ๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ์ ํฌํจ๋๋ ๊ฒฝ์ฐ (ORDER BY ์ -> ์กฐ๊ฑด์ ์์)
- ์กฐ๊ฑด์ + ORDER BY ์ ์ ์นผ๋ผ๋ค์ด ๋ชจ๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ์ ํฌํจ๋๋ ๊ฒฝ์ฐ (์กฐ๊ฑด์ ์ผ๋ถ -> ORDER BY ์ -> ์กฐ๊ฑด์ ์์)
1. ์กฐ๊ฑด์์ ๋ชจ๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ์ด ํฌํจ๋๋ ๊ฒฝ์ฐ
์ด ๊ฒฝ์ฐ๋ ์ฌ์ค ์ธ๋ฑ์ค๋ฅผ ํ๋ค๋ ์ฌ์ค์ด ๋ช ํํ๋ค. ๊ทธ๋์ ๋จ์ํ ์ธ๋ฑ์ค๋ฅผ ํ๋์ง ์ํ๋์ง์ ๋ํด ๋ค๋ฃจ๊ธฐ ๋ณด๋ค๋ ๊ฐ ์นผ๋ผ์ ์นด๋๋๋ฆฌํฐ์ ๋ฐ๋ผ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์์๊ฐ ๋ฐ๋์์ ๋ ์ํฅ์ด ์๋์ง ์ง์ ํ์ธํด๋ณด๋ ค ํ๋ค.
์ฐ์ ํ์ฌ ๊ฐ ์นผ๋ผ์ ๋ํ ์นด๋๋๋ฆฌํฐ๋ฅผ ์กฐํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
SELECT
(SELECT AVG(tmp_a.cnt) FROM (SELECT a, count(*) as cnt FROM test_table GROUP BY a) tmp_a) as avg_card_a,
(SELECT AVG(tmp_b.cnt) FROM (SELECT b, count(*) as cnt FROM test_table GROUP BY b) tmp_b) as avg_card_b,
(SELECT AVG(tmp_c.cnt) FROM (SELECT c, count(*) as cnt FROM test_table GROUP BY c) tmp_c) as avg_card_c,
(SELECT AVG(tmp_d.cnt) FROM (SELECT d, count(*) as cnt FROM test_table GROUP BY d) tmp_d) as avg_card_d,
(SELECT AVG(tmp_e.cnt) FROM (SELECT e, count(*) as cnt FROM test_table GROUP BY e) tmp_e) as avg_card_e;
์นด๋๋๋ฆฌํฐ ์กฐํ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ a -> e๋ก ๊ฐ์๋ก ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์์ง๋ ์ํฉ์ด๋ค. ์ด์ ๊ธฐ์กด์ ๋ง๋ค์ด๋ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํด์ ์กฐํํ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
SELECT *
FROM test_table
WHERE a = 20 AND b = 150 AND c = 400 AND d = 750 AND e = 1500;
์ด์ ๊ธฐ์กด์ ๋ง๋ค์ด๋ ์ธ๋ฑ์ค๋ฅผ ์ญ์ ํ๊ณ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ ์ค ์นด๋๋๋ฆฌํฐ๊ฐ ๊ฐ์ฅ ๋ฎ์ ์์ผ๋ก (d, c, b, a) ๋ก ๊ตฌ์ฑํ ๋ค ๋์ผํ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
๋ ์คํ ๊ณํ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์๋ก ์ฝ์คํธ๊ฐ ๋์ผํ๋ค. ์ฆ, ๋ณตํฉ ์ธ๋ฑ์ค ๋ด์์ ์นด๋๋๋ฆฌํฐ์ ๋ฐ๋ผ ์์๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ์ ํ ์๋ฏธ๊ฐ ์๋ค. (๋ค๋ง, ์นด๋๋๋ฆฌํฐ์ ๋ฐ๋ผ ์ธ๋ฑ์ค์ ํฌํจํ ์ง ๋ง์ง ๊ณ ๋ คํ๋ ๊ฒ์ ํ๋นํ ๊ณ ๋ ค์ด๋ค.)
2. ์กฐ๊ฑด์์ ๋ณตํฉ ์ธ๋ฑ์ค ์นผ๋ผ์ด ์ผ๋ถ๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ (์ ๋ ์นผ๋ผ๋ถํฐ ์ฐ์์ )
์๋ ์ฟผ๋ฆฌ์ ์คํ๊ณํ์ ํ์ธํ๋ค.
SELECT *
FROM test_table
WHERE a = 20 AND b = 150 AND e = 1200;
์ ๋์นผ๋ผ๊ณผ ์ด์ด์ง๋ ์นผ๋ผ์ด ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ ์กฐ๊ฑด์ ์ธ๋ฑ์ค ์ค์บ์ ํ์ฉ๋๋ค.
3. ์กฐ๊ฑด์์ ๋ณตํฉ ์ธ๋ฑ์ค ์นผ๋ผ์ด ์ผ๋ถ๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ (์ ๋ ์นผ๋ผ ํฌํจ X)
์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด ์๋ ์ฟผ๋ฆฌ์ ์คํ๊ณํ์ ํ์ธํ๋ค.
SELECT *
FROM test_table
WHERE b = 150 AND c = 400 AND d = 750;
๊ฒฐ๊ณผ์์ ๋ณผ ์ ์๋ฏ ์ธ๋ฑ์ค๋ฅผ ์ ํ ํ์ฉํ์ง ๋ชปํ๊ณ ํ ์ด๋ธ ํ์ค์บ์ด ์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ ๋ ์นผ๋ผ์ด ์กฐ๊ฑด์ ์ ํฌํจ๋์ด ์์ง ์๋ค๋ณด๋ ์ธ๋ฑ์ค ๋๋ถ๋ถ์ ํ์ธํด์ผ ํ๋ ์ํฉ์ด ๋๊ณ ์ด๋ฅผ ํ ๋๋ก ํ ์ด๋ธ์ ์ ๊ทผ๊น์ง ํด์ผํ๋ ์ํฉ(SELECT * ๋๋ฌธ)์ด๊ธฐ ๋๋ฌธ์ ์ตํฐ๋ง์ด์ ๊ฐ ํ ์ด๋ธ ํ์ค์บ์ ์ํํ ๊ฒ์ผ๋ก ์ดํดํ ์ ์๋ค.
๋ง์ฝ, ์ฟผ๋ฆฌ๊ฐ SELECT * ์ด ์๋ ์ธ๋ฑ์ค์ ํฌํจ๋ a, b, c, d๋ง ์กฐํํ๋ ์ฟผ๋ฆฌ์๋ค๋ฉด ์ตํฐ๋ง์ด์ ๋ ์ด๋ค ์ ํ์ ํ ๊น? ๊ทธ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
SELECT a, b, c, d
FROM test_table
WHERE b = 150 AND c = 400 AND d = 750;
์ธ๋ฑ์ค ์ค์บ๋ง ์ํํด๋ ์ฟผ๋ฆฌ์์ ์ํ๋ ์นผ๋ผ์ ๋ชจ๋ ํ๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฒ์ ์ธ๋ฑ์ค ์คํต ์ค์บ์ ์ํํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ฟผ๋ฆฌ ๋ ๋ฒจ์์ ๋ถํ์ํ ์นผ๋ผ์ ์กฐํํ์ง ์๋๋ก ํ๋ค๋ฉด ์ ์์ ์ธ ์ธ๋ฑ์ค ํ์ฉ ์ํฉ์ด ์๋๋๋ผ๋ (์ ๋ ์นผ๋ผ์ด ์กฐ๊ฑด์ ์ ํฌํจ๋์ง ์์) ์ฑ๋ฅ ๊ฐ์ ์ ํด๋ณผ ์ฌ์ง๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
4. ์กฐ๊ฑด์์ ๋ณตํฉ ์ธ๋ฑ์ค ์นผ๋ผ์ด ์ผ๋ถ๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ (์ ๋ ์นผ๋ผ์ ํฌํจ๋๋ ์ค๊ฐ์ ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ ๊ฒฝ์ฐ)
์ด๋ฅผ ํ์ธํด๋ณด๊ธฐ ์ํด ์๋ ์ฟผ๋ฆฌ์ ๋ํ ์คํ ๊ณํ์ ํ์ธํ๋ค.
SELECT *
FROM test_table
WHERE a = 20 AND c = 400 AND d = 750 AND e = 1500;
์คํ ๊ณํ์ ๋ณด๋ฉด Index Scan์ด ์ํ๋๋ ๋ณตํฉ ์ธ๋ฑ์ค์ ํฌํจ๋ ์นผ๋ผ ์ค a ์นผ๋ผ์ ๋ํด์๋ง ์ค์บ์ด ์ํ๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ทธ ๋ค์ with index condition์ด๋ผ๋ ๊ตฌ๋ฌธ์ด ์ถ๊ฐ๋์ด ์๋๋ฐ, ์ด๋ Mysql์ Index Condition Pushdown(ICP)์ด๋ผ๋ ๊ธฐ๋ฅ์ด ์๋ํ ๊ฒฐ๊ณผ์ด๋ค. ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ์๋ฉด, ICP๊ฐ ๋์ ๋๊ธฐ ์ ๊น์ง๋ ์นผ๋ผ a๋ฅผ ์ด์ฉํ ์ธ๋ฑ์ค ์ค์บ๋ง ์ํํ๊ณ ์ด ๊ฒฐ๊ณผ๋ฅผ ํ ๋๋ก ๋๋จธ์ง ์นผ๋ผ์ ๋ํด์๋ ํ ์ด๋ธ ๋ ๋ฒจ ํํฐ๋ง์ด ์๋ํ๋ ๋ฐฉ์์ด์๋ค. ์ด๋ฏธ ์ธ๋ฑ์ค ์ค์บ์ ํ๋ฉด์ ์ธ๋ฑ์ค์ ํฌํจ๋ c, d ์นผ๋ผ์ ๋ฏธ๋ฆฌ ํ์ธํ ์ ์์์ผ๋ ๊ทธ๋ ๊ฒ ํ์ง ์๊ณ ์์๋ ๊ฒ์ธ๋ฐ, ICP๊ฐ ๋์ ๋ ํ์๋ ๋ฆฌํ ๋ ธ๋์์ ์ธ๋ฑ์ค๋ฅผ ํ์ธํ ๋ ์ด ์์ ๋ ๊ฐ์ดํ๊ฒ ๋๋ค. ์ผ์ข ์ ์ธ๋ฑ์ค ์์ง์ ํ์์ธ ๊ฒ์ด๋ค.
์ฆ, ์ด๋ฅผ ํด์ํ๋ฉด a ์นผ๋ผ์ ์ธ๋ฑ์ค ์ก์ธ์ค ์กฐ๊ฑด์ผ๋ก c, d ์นผ๋ผ์ ์ธ๋ฑ์ค ํํฐ๋ง ์กฐ๊ฑด์ผ๋ก, ๋๋จธ์ง e ์นผ๋ผ์ ํ ์ด๋ธ ํํฐ๋ง ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋ ๊ฒ์ด๋ค. (์ฌ์ค ์ธ๋ฑ์ค ํํฐ๋ง ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ ๋ชปํ ์ค ์์๋๋ฐ ์์ธ์ ๊ฒฐ๊ณผ. ๋ค๋ฅธ DB๋ ๋น์ทํ ๋ฐฉ์์ผ๋ก ์๋ํ๋์ง๋ ํ์ธ์ด ํ์ํด๋ณด์ธ๋ค.)
5. ์กฐ๊ฑด์์ ๋ชจ๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ์ด ํฌํจ๋๋, ์ค๊ฐ์ ๋ฒ์ ํ์ ์กฐ๊ฑด์ ์ฌ์ฉํ ๊ฒฝ์ฐ
์ด๋ฅผ ํ์ธํด๋ณด๊ธฐ ์ํด ์๋ ์ฟผ๋ฆฌ์ ์คํ ๊ณํ์ ํ์ธํ๋ค.
SELECT *
FROM test_table
WHERE a = 20 AND b > 100 AND c = 400 AND d = 750 AND e = 1500;
์คํ ๊ณํ์ ๋ณด๋ฉด a์ b๊น์ง๋ ์ธ๋ฑ์ค ์ค์บ์ ํ์ฉ๋์๋ค. (์ธ๋ฑ์ค ์์ง์ ํ์, ์ธ๋ฑ์ค ์ก์ธ์ค ์กฐ๊ฑด)
ํ์ง๋ง b ์นผ๋ผ ์กฐ๊ฑด์ ์ ๋ฒ์ ํ์ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ์ฌ ๊ทธ ์ดํ ์นผ๋ผ๋ค์ ๋ชจ๋ with index condition ์ ์ ๋ํ๋ ๊ฒ์ฒ๋ผ ์ธ๋ฑ์ค ํํฐ๋ง ์กฐ๊ฑด์ผ๋ก ํ์ฉ๋ ๊ฒ์ผ๋ก ํ์ ํ ์ ์๋ค. (์ธ๋ฑ์ค ํํฐ๋ง ์กฐ๊ฑด)
6. ์กฐ๊ฑด์ + ORDER BY ์ ์ ์นผ๋ผ๋ค์ด ๋ชจ๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ์ ํฌํจ๋๋ ๊ฒฝ์ฐ (์กฐ๊ฑด์ -> ORDER BY ์ ์์)
์ด ๊ฒฝ์ฐ๋ ์ฌ์ค ์ธ๋ฑ์ค๊ฐ ์ ์ ์๋ํ๋ฉฐ, ์ถ๊ฐ์ ์ธ ์ ๋ ฌ๋ ์คํต๋๋ ํํ๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ทธ๋๋ ํ์ธ ์ฐจ ์คํ ๊ณํ์ ํ์ธํ๋ค.
SELECT *
FROM test_table
WHERE a = 20 AND b = 200 AND e = 1500
ORDER BY c, d;
์คํ ๊ณํ์ ๋ณด๋ฉด c, d ์นผ๋ผ์ ๋ํ ์ธ๊ธ์ด ๋ฐ๋ก ์์ง๋ง Sort ์คํ ๊ณํ์ด ์๋ต๋ ๊ฒ์ ์ ์ ์๋ค. ์๋๋๋ก ์ ์๋ํ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
7. ์กฐ๊ฑด์ + ORDER BY ์ ์ ์นผ๋ผ๋ค์ด ๋ชจ๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ์ ํฌํจ๋๋ ๊ฒฝ์ฐ (ORDER BY ์ -> ์กฐ๊ฑด์ ์์)
๊ทธ๋ ๋ค๋ฉด ์ด๋ฒ์ ORDER BY ์ ์ ์นผ๋ผ์ด ์ ๋ ์นผ๋ผ์ธ ๊ฒฝ์ฐ๋ ์ด๋จ๊น?
์ด๋ฅผ ํ์ธํด๋ณด๊ธฐ ์ํด ์๋ ์ฟผ๋ฆฌ์ ๋ํ ์คํ ๊ณํ์ ํ์ธํ๋ค.
SELECT *
FROM test_table
WHERE b = 100 AND c = 400 AND d = 750 AND e = 1500
ORDER BY a;
์คํ ๊ณํ์ ๋ณด๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ ํ ํ์ฉํ์ง ๋ชปํ๋ ๊ฒ์ ์ ์ ์๋ค. ์กฐ๊ฑด์ ๋ณด๋ค ORDER BY ์ ์ ์นผ๋ผ์ด ๋จผ์ ํ์ฉ๋๋ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ํ์ง ๋ชปํ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
8. ์กฐ๊ฑด์ + ORDER BY ์ ์ ์นผ๋ผ๋ค์ด ๋ชจ๋ ๋ณตํฉ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์นผ๋ผ์ ํฌํจ๋๋ ๊ฒฝ์ฐ (์กฐ๊ฑด์ ์ผ๋ถ -> ORDER BY ์ -> ์กฐ๊ฑด์ ์์)
์ด๋ฅผ ํ์ธํด๋ณด๊ธฐ ์ํด ์๋ ์ฟผ๋ฆฌ์ ๋ํ ์คํ๊ณํ์ ํ์ธํ๋ค.
SELECT *
FROM test_table
WHERE a = 20 AND d = 750 AND e = 1500
ORDER BY b, c;
ํด๋น ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ํ๋ ๊ฒ์ผ๋ก ํ์ธํ ์ ์๋ค. a ์นผ๋ผ์ ์ธ๋ฑ์ค ์ก์ธ์ค ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ๊ณ , d ์นผ๋ผ์ ์ธ๋ฑ์ค ํํฐ๋ง ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉํ๋ค. ์ธ๋ฑ์ค ๋ฆฌํ๋ ธ๋๋ ์ด๋ฏธ b, c ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค ์ ๋์นผ๋ผ์ ํตํด ์ธ๋ฑ์ค๋ฅผ ํ๊ธฐ๋ง ํ๋ค๋ฉด Sorting์ ์๋ต ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ํ์ ๋๋ค.
'Database > DB ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ธ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ๋ํ ์คํด (1) | 2024.01.21 |
---|---|
SGA vs PGA (in Oracle) (1) | 2024.01.14 |
๋ฑํธ ์ฐ์ฐ์์ LIKE ์ฐ์ฐ์ ๊ฐ ๋น๊ต (1) | 2023.12.17 |
Buffer Pinning ๊ธฐ๋ฒ (in Oracle) (0) | 2023.12.09 |
ํ ์ด๋ธ ์ค์บ ๋ฐฉ์์ ๋ฐ๋ฅธ DB Block IO ์ ๋ต (Single vs Multi) (1) | 2023.12.02 |