์ธ๋ฑ์ค๋?
์ถ๊ฐ์ ์ธ ์ฐ๊ธฐ ์์ ๊ณผ ์ ์ฅ๊ณต๊ฐ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ฒ์ ์๋๋ฅผ ํฅ์ํ๊ธฐ ์ํ ์๋ฃ ๊ตฌ์กฐ
์ฆ, index
๋ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ ์ ์ฅํ๋ ๋ณ๋์ ํน๋ณํ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. index๋ฅผ ํ์ฉํด์ ๋น ๋ฅด๊ฒ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๋ค.
- DBํ ์ด๋ธ์ ์ธ๋ฑ์ค๊ฐ ํ์ํ ์ด์
- ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ณ ์ถ์ ๋ ํ ์ด๋ธ ์ ์ฒด๋ฅผ ํ์ค์บ(full scan) ํด์ผ ํ๋ค.
Full Scan
์๊ฐ ๋ณต์ก๋ : O(N)- Index๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋(B tree) : O(logN)
- ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํํ(๋ค)์ ๋น ๋ฅด๊ฒ ์กฐํํ๊ธฐ ์ํด์
- ๋น ๋ฅด๊ฒ ์ ๋ ฌ(order by)ํ๊ฑฐ๋ ๊ทธ๋ฃนํ(group by) ํ๊ธฐ ์ํด
- ์ธ๋ฑ์ค ์ค์ ํ๋ ๋ฐฉ๋ฒ
- ์ด๋ฏธ ํ ์ด๋ธ๊ณผ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ
CREATE TABLE PLAYER(
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
team_id INT NOT NULL,
back_number INT NOT NULL
);
์ฟผ๋ฆฌ๋ฌธ
SELECT * FROM player WHERE name = "Sonny";
SELECT * FROM player WHERE team_id = 105 AND back_number = 7;
์๋๋ ํ ์ด๋ธ๊ณผ ์ฟผ๋ฆฌ๋ฌธ์ด ์์๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ค.
-- single column index
CREATE INDEX player_name_idx ON player(name);
-- multi column index
CREATE UNIQUE INDEX team_id_back_number_idx ON player(team_id, back_number);
- ํ ์ด๋ธ ์์ฑ์ Index ์์ฑ
CREATE TABLE PLAYER(
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
team_id INT NOT NULL,
back_number INT NOT NULL,
INDEX player_name_idx(name),
UNIQUE INDEX team_id_back_number_idx(team_id, back_number)
);
Multi Column Index
1) ๊ณ ๋ ค์ฌํญ
-- multi column index
CREATE UNIQUE INDEX team_id_back_number_idx ON player(team_id, back_number);
๐ค ์ด๋ค ๊ฒฝ์ฐ์ multi column index๋ฅผ ์์ฑ์ ๊ณ ๋ คํด์ผ ํ ๊น?
๐ก WHERE์ ์์ AND ์ฐ์ฐ์์ ์ํด ์์ฃผ ๊ฐ์ด ์ง์๋๋ ์นผ๋ผ์ธ ๊ฒฝ์ฐ
- ํ ์นผ๋ผ์๋ง ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์๋ค๋ฉด AND ์กฐ๊ฑด์์ ์ธ๋ฑ์ค๊ฐ ์๋ ์นผ๋ผ์ ์ฐพ๋ ์ฐ์ฐ์์ ๊ฒฝ์ฐ์ ํ์ค์บ์ด๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก Multi Column Index ์ค์ ์ ๊ณ ๋ คํด์ผ ํ๋ค.
๐ค ์์ฑํ ๋ ์ด๋ค ์์๋ก ์ ๋ ฌ๋๋ ๊ฑธ๊น?
๐ก ์์ ์ค๋ ์์ผ๋ก ์ ๋ ฌ๋๋ค. INDEX(a, b) a๋ถํฐ ์ ๋ ฌ
๐ค WHERE back_number = 7 ์กฐ๊ฑด๋ฌธ์ด
๋ค์ด์ค๋ฉด ์ฑ๋ฅ์ ์ด๋จ๊น?
๐ก ์์ ์์ฑ๋ Multi Column Index๋ ์ฐ์ team_id๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ํ ์ค์บ๊ณผ ๊ฐ๊ฑฐ๋ ์ข์ง ์์ ์๋ ์๋ค
2) ์ฅ์
Covering Index
SELECT team_id, back_number FROM player WHERE team_id = 5;
๋ชจ๋ Attribute๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋ ์ธ๋ฑ์ค๋ก ์ค์ ํ ์ ๋ณด๋ง ๊ฐ์ง๊ณ ์จ๋ค. ๊ทธ๋ฌ๋ฉด ์ธ๋ฑ์ค์์ ๊ฒ์ํ ์ดํ ๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํฐ ๋ธ๋ก์ ์ฝ์ ํ์๊ฐ ์๋ค.
- ์กฐํํ๋ attribute(s)๋ฅผ index๊ฐ ๋ชจ๋ cover ํ ๋ ์กฐํ ์ฑ๋ฅ์ด ๋ ๋น ๋ฅด๋ค.
Index ๊ตฌ์กฐ
- Single-Level Ordered Indexes
- ๊ฐ ์ํธ๋ฆฌ๋
<ํ์ ํค, ๋ ์ฝ๋์ ๋ํ ํฌ์ธํฐ>
- ์ํธ๋ฆฌ๋ค์ ํ์ ํค๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๋ค.
โ๏ธ1) Primary Index(๊ธฐ๋ณธ ์ธ๋ฑ์ค) | sparse index
- ํ์ ํค ๊ฐ์ ๋ฐ๋ผ ์ ๋ ฌ๋ ๋ฐ์ดํฐ ํ์ผ์ ๋ํด ์ ์
- ํ์ ํค๊ฐ ํ
์ด๋ธ์
๊ธฐ๋ณธ ํค(Primary key)
์ธ ์ธ๋ฑ์ค
โป
Dense index : ๋ชจ๋ key value์ ๋ํด index entry๋ฅผ ์ค๋ค. ์ฆ, ๋ชจ๋ ๋ ์ฝ๋์ ๋ํด ์์ธ์ ๋ง๋ ๋ค.
Sparse index : ๋ช๋ช ๊ฐ์ ๋ํด์๋ง entry๋ฅผ ๋ง๋ ๋ค. ๋๋ถ๋ถ ๊ธฐ๋ณธ์ ์ผ๋ก sparse index๋ฅผ ์ฌ์ฉํ๋ค. Primary index๋ sparse index์ด๋ค.
โ๏ธ2) Clustering index (ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค) | sparse index
- ํ์ ํค ๊ฐ์ ๋ฐ๋ผ ์ ๋ ฌ๋ ๋ฐ์ดํฐ ํ์ผ์ ๋ํด ์ ์
- ๋ง์ ๋ ์ฝ๋๊ฐ ordering field์ ๋ํ ๊ณตํต๋ ๊ฐ์ ๊ฐ์ง ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ค.
โ๏ธ3) Secondary index (๋ณด์กฐ ์ธ๋ฑ์ค) | dense index
- ๋ค๋ฅธ ์ธ๋ฑ์ค๋ฅผ ๋๋ ๋ณด์กฐ ์ธ๋ฑ์ค์ด๋ฉฐ ๋ ์ฝ๋๊ฐ ์ด๋ ์์นํ ์ง๋ง ์๋ ค์ฃผ๋ ์ญํ
- ์ฃผํค๊ฐ ์๋๋ผ ๋ณด์กฐ ํค๋ฅผ ์ด์ฉํ์ฌ ์ถ๊ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ํ๋ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
Multi-Level Indexes
- ์ธ๋ฑ์ค ์์ฒด๊ฐ ํฐ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ํ์ํ๋ ์๊ฐ๋ ์ค๋ ๊ฑธ๋ฆด ์ ์๋ค.
- ์ธ๋ฑ์ค ์ํธ๋ฆฌ๋ฅผ ํ์ํ๋ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด์ Single-Lever Ordered Indexes๋ฅผ ๋์คํฌ ์์ ํ๋์ ์์ ํ์ผ๋ก ์๊ฐํ๊ณ , ์ด๊ฒ์ ๋ํด ๋ค์ ์ธ๋ฑ์ค๋ฅผ ์ ์ํ ์ ์๋ค.
- ๊ฐ์ฅ ์์ ๋จ๊ณ ์ธ๋ฑ์ค๋ฅผ ๋ง์คํฐ ์ธ๋ฑ์ค(Master index)
- ๋๋ถ๋ถ์ B+ํธ๋ฆฌ๋ฅผ ์ฌ์ฉ
๋์ ๋ฐฉ์ (์๋ฃ๊ตฌ์กฐ)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค์ ์์ฃผ ์ฐ์ด๋ ์๋ฃ๊ตฌ์กฐ๋ B-Tree, B+Tree, Hash Table
์ด๋ค.
- B-tree
- ์๊ฐ ๋ณต์ก๋ : O (LogN)
- B-tree๋ ์์ ๋ ธ๋๊ฐ 2๊ฐ ์ด์์ธ ํธ๋ฆฌ
- ๊ท ํ ํธ๋ฆฌ(Balanced Tree)๋ก์จ, ์ต์์ ๋ฃจํธ ๋ ธ๋์์ ๋ฆฌํ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ ๋ชจ๋ ๋์ผ
- B+tree
- B+Tree๋ B-Tree๋ฅผ ํ์ฅ ๋ฐ ๊ฐ์ ํ ์๋ฃ ๊ตฌ์กฐ
- ๋ฐ์ดํฐ์ ๋น ๋ฅธ ์ ๊ทผ์ ์ํ ์ธ๋ฑ์ค ์ญํ ๋ง ํ๋ ๋น๋จ๋ง ๋ ธ๋(Not Leaf)๊ฐ ๋ถ๋ฆฌ๋์ด ์๋ค.
- ๊ด๊ณํ DB์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ค.
- Hash Table
- ์๊ฐ ๋ณต์ก๋ : O(1)
๐ค๋จ์ ์๊ฐ ๋ณต์ก๋๋ก๋ง ๋ณด๋ฉด ์ ์ผ ๋น ๋ฅธ๋ฐ ์ B Tree๊ณ์ผ์ ์ฌ์ฉํ ๊น?
โ๏ธHash Table ๋จ์
- ํด์๋ ๋ฑํธ(=.!=) ์ฐ์ฐ์๋ง ํนํ๋์ด ์์ด ๋ถ๋ฑํธ ์ฐ์ฐ(<, <=)์ด ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์์๋ ํ
์ด๋ธ์ด ์ ํฉํ์ง ์๋ค.
์ฆ,equality
๋น๊ต๋ง ๊ฐ๋ฅํ๊ณrange
๋น๊ต๋ ๋ถ๊ฐ๋ฅํ๋ค. - Multi Column Index์ ๊ฒฝ์ฐ, ์ ์ฒด Attributes์ ๋ํ ์กฐํ๋ง ๊ฐ๋ฅํ๋ค.
B Tree ๊ธฐ๋ฐ์ ์ธ๋ฑ์ค์์๋ INDEX(a, b)๋ ์ํฉ์ ๋ฐ๋ผ a์นผ๋ผ์ผ๋ก ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง, Hash Index๋ ๋ฌด์กฐ๊ฑด ๋ ์นผ๋ผ ๋ชจ๋ ์ฌ์ฉํด์ ์กฐํํด์ผ ํ๋ค.
- ์ Index๋ก B tree ๊ณ์ด์ด ์ฌ์ฉ๋ ๊น?
โ๏ธSecondary Storage (SSD or HDD)
- ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์๋๊ฐ ๊ฐ์ฅ ๋๋ฆฌ๋ค
- ๋์คํฌ I/O (ํนํ ๋๋ค I/O)๊ฐ ๋ง์ด ๋ฐ์ํ๋ฉด ๋๋ฆฌ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ฉ๋์ด ๊ฐ์ฅ ํฌ๋ค.
- Block๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ด๋ค.
์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ Secondary Storage์ ์ ์ฅ๋๋ค.
์์ ํน์ง์ ๊ณ ๋ คํ์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ Secondary Storage์ ์ต๋ํ ์ ๊ฒ ์ ๊ทผํ๋ ๊ฒ์ด ์ฑ๋ฅ๋ฉด์์ ์ข๋ค.
(๋ฐ์ดํฐ๋ฒ ์ด์ค์ I/O๋ ๋์คํฌ๋ฅผ ํตํด ๋ฌผ๋ฆฌ์ ์ธ ์์
์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ)
๋ํ Block ๋จ์๋ก ์ฝ๊ณ ์ฐ๊ธฐ ๋๋ฌธ์ ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ์ ์ฅํ๋ฉด ๋ ํจ์จ์ ์ผ๋ก ์ฝ๊ณ ์ธ ์ ์๋ค.
๐๏ธ์ ๋ฆฌ
- Secondary Storage์ ์ต๋ํ ์ ๊ฒ ์ ๊ทผํด์ผ ํ๋ค.
- B Tree ๊ณ์ด์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ํธ๋ฆฌ๋ณด๋ค ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ ํ์ ๋ฒ์๋ฅผ ๋น ๋ฅด๊ฒ ์ขํ ์ ์๋ค.
- B Tree ๋ ธ๋๋ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค. ( ์ฌ๋ฌ ๊ฐ์ ์๋ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์๋ค.)
Index๋ฅผ ์ค์ ํ ๋ ๊ณ ๋ ค์ฌํญ
- ์ฑ๋ฅ์ ํ
- ํ ์ด๋ธ์ witer ์์ (INSERT, DELETE, UPDATE)์ ํ ๋ index๋ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ์ด ๋ฐ์
- ์ถ๊ฐ์ ์ธ ์ ์ฅ๊ณต๊ฐ ์ฐจ์ง
- Full scan์ด ์ฑ๋ฅ์ด ๋ ์ข์ ๊ฒฝ์ฐ
- full scan์ ํ ์ง ์ฌ๋ถ๋ optimizer๊ฐ ํ๋จ
- ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์กฐ๊ธ ์์ ๋
- ์กฐํํ๋ ค๋ ๋ฐ์ดํฐ๊ฐ ํ ์ด๋ธ์ ์๋น ๋ถ๋ถ์ ์ฐจ์งํ ๋
๋ณดํต ์ ์ฒด ๋ฐ์ดํฐ์ 5~10% ์ ๋๋ก ๊ฑธ๋ฌ์ง๋ ๊ฒฝ์ฐ index๋ฅผ ์ฌ์ฉํ์ ๋ ์ข์ ํจ์จ์ ๋ผ ์ ์๋ค.
์ ์ฒด ๋ฐ์ดํฐ 20%๋ฅผ ๋์ด๊ฐ๋ ๊ฒฝ์ฐ์๋ full scan์ด ๋น ๋ฅผ ์ ์๋ค.
์ธ๋ฑ์ค ์ค์ ๊ธฐ์ค
- Cardinality ( ์นด๋๋๋ฆฌํฐ )
- ์นด๋๋๋ฆฌํฐ๊ฐ ๋์์๋ก ์ธ๋ฑ์ค ์ค์ ์ ์ข์ ์นผ๋ผ์ด๋ค. ( ํ ์นผ๋ผ์ด ๊ฐ๊ณ ์๋ ๊ฐ์ ์ค๋ณต ์ ๋๊ฐ ๋ฎ์์๋ก ์ข๋ค.)
- ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ถํ์ํ ๋ฐ์ดํฐ์ ๋๋ถ๋ถ์ ๊ฑธ๋ฌ๋ผ ์ ์๋ค.
- Selectivity ( ์ ํ๋ )
- ์ ํ๋๊ฐ ๋ฎ์์๋ก ์ธ๋ฑ์ค ์ค์ ์ ์ข์ ์นผ๋ผ์ด๋ค. (์ผ๋ฐ์ ์ผ๋ก 5~10% ์ ๋น)
- ์ ํ๋๊ฐ ๋ฎ๋ค๋ ์๋ฏธ๋ ํ ์นผ๋ผ์ด ๊ฐ๊ณ ์๋ ๊ฐ ํ๋๋ก ์ ์ row๊ฐ ์ฐพ์์ง๋ ๊ฒ์ ์๋ฏธํ๋ค.
โป
์ ํ๋ ๊ณ์ฐ๋ฒ (์ ์ฒด ๋ ์ฝ๋ ์ค์์ ์กฐ๊ฑด์ ์ ์ํด ์ ํ๋๋ ๋ ์ฝ๋ ๋น์จ)
: ์นผ๋ผ์ ํน์ ๊ฐ์ row ์ / ํ ์ด๋ธ์ ์ด row ์ * 100
- ํ์ฉ๋
- ํ์ฉ๋๊ฐ ๋์์๋ก ์ธ๋ฑ์ค ์ค์ ์ ์ข์ ์นผ๋ผ์ด๋ค.
- ์์ ๋น๋
- ์์ ๋น๋๊ฐ ๋ฎ์์๋ก ์ธ๋ฑ์ค ์ค์ ์ ์ข์ ์นผ๋ผ์ด๋ค.
- ์ธ๋ฑ์ค ์ค์ ๋ ์นผ๋ผ์ด ๊ฐ์ด ๋ฐ๋๊ฒ ๋๋ค๋ฉด ์ธ๋ฑ์ค๋ ์๋ก ๊ฐฑ์ ํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ถ์ฒ : github.com/devSquad-study
'๐์คํฐ๋ > ๋ฐ์ดํฐ๋ฒ ์ด์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ์ดํฐ๋ฒ ์ด์ค] - B-Tree & B+Tree (0) | 2024.04.01 |
---|---|
[๋ฐ์ดํฐ๋ฒ ์ด์ค] - ํธ๋ฆฌ๊ฑฐ (0) | 2024.03.27 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] - ์ ์ฅ ํ๋ก์์ (0) | 2024.03.27 |