์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- item15
- SVN
- mysql
- InnoDB์ํคํ ์ฒ
- assert.notnull
- ๋ฐ์ฉ๋ ์ค๊ตญ์ด
- effectiveJava
- ์๋ผ์คํฑ์์น๋ฉ์ธ์ง์ฉ๋
- ์๋ฐ์ฐ๋ ๋
- Hikari Connection Pool
- enum ์์ฑ์ ์ ๊ทผ ์ ํ์
- ์ธ๋ฑ์คํ์ค์บ
- hikari cp ์ค์
- ์์
- builder null
- index full scan
- ์๋ฐ์์์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฒฉ๋ฆฌ์์ค
- ์๋ฐ์์
- ์์ดํ 15
- ์ํฐ๋ ๊ฐ๋ฐ์ํ์ฌ
- Item6
- mysql์ํคํ ์ฒ
- ์ํฐ๋ ๋ณ์ข ๊ฐ๋ฐ์
- ์ดํํฐ๋ธ์๋ฐ
- ์๋ฐ
- index skip scan
- ๋น์ผ๊ฐ์ฒด์์ฑ
- ์ธ๋ฑ์ค์คํต์ค์บ
- ์๋ฐ๋ผ์ด๋ธ์คํฐ๋
- Today
- Total
โ๐ป๊ธฐ๋กํ๋ ๋ธ๋ก๊ทธ
B-Tree ๋ณธ๋ฌธ
B-Tree(B(Balanced)-Tree)๋?
Database์์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์๋ฃ๊ตฌ์กฐ
๊ตฌ์กฐ ๋ฐ ํน์ฑ
RDBMS์์ btree์ ๋ณํ์ธ B+Tree, B*-Tree ์ ํ๋ ์ฌ์ฉ
์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ํค ์นผ๋ผ๋ง ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ํค์นผ๋ผ์ ์ฝ์ด ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ณณ์ ๊ฐ์ ์กฐํํด์ผ ํ๋ค.
์ต์์ | Root Node |
์ค๊ฐ | Branch Node |
ํ๋จ(์ค์ ๋ฐ์ดํฐ ์ปฌ๋ผ์ ์ฐพ์๊ฐ๋ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์์) | Leaf Node |
B-Tree ์ธ๋ฑ์ค ํค ์ถ๊ฐ ๋ฐ ์ญ์
์ธ๋ฑ์ค ํค ์ถ๊ฐ, ์ญ์ , ๋ณ๊ฒฝ ๋ฑ์ MySQL v5.5 ์ดํ (InnoDB์์ง) ์ฒด์ธ์ง ๋ฒํผ๋ฅผ ํตํด ์ง์ฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์ธ๋ฑ์ค ํค ์ถ๊ฐ
- ์ ์ฅ๋ ํค ๊ฐ์ ์ด์ฉํด B-Tree๋ด๋ถ์ ์ ์ ํ ์์น ๊ฒ์
- ์ ์ฅ๋ ์์น๊ฐ ์ ํด์ง๋ฉด ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ด๋ leaf Node์ ์ ์ฅ
- ์ธ๋ฑ์ค ํค ์ญ์
- ์ญ์ ํ ํค๊ฐ์ด ์ ์ฅ๋ b-tree๋ ธ๋๋ฅผ ์ฐพ์ ๋งํน
- ์ธ๋ฑ์ค ํค ๋ณ๊ฒฝ
- ์ธ๋ฑ์ค์ ํค ๊ฐ๋ง ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ๋จผ์ ์ญ์ ํ ์ถ๊ฐํด์ผ ํจ
- ์ธ๋ฑ์ค ํค ๊ฒ์(ํธ๋ฆฌํ์)
- Root Node → Branch Node → Leaf Node์์๋๋ก ํ์
B-Tree ์ธ๋ฑ์ค ์ฌ์ฉ์ ์ํฅ์ ๋ฏธ์น๋ ์์
1. ์ธ๋ฑ์ค ํค ๊ฐ์ ํฌ๊ธฐ
- ์ธ๋ฑ์ค์ ํ์ด์ง ํฌ๊ธฐ์ ํค๊ฐ์ ๋ฐ๋ผ ์ธ๋ฑ์ค๊ฐ ๊ฐ์ง๋ ๋ ธ๋ ๊ฐ์ ๊ฒฐ์ ๋จ
- innodb_page_size ์์คํ ๋ณ์๋ฅผ ํตํด ํ์ด์ง ์ฌ์ด์ฆ ์ค์ ๊ฐ๋ฅ
- ๊ธฐ๋ณธ : 16KB, 4~64KB๊น์ง ์ค์ ๊ฐ๋ฅ
2. B-Tree ๊น์ด
- B-Tree ๊น์ด๋ MySQL์์ ๊ฐ์ ๊ฒ์ ์ ๋์คํฌ๋ฅผ ์ฝ์ด์ผ ํ๋ ํ์์ ์ง๊ฒฐ๋จ
- ์ธ๋ฑ์ค ํค๊ฐ์ ํฌ๊ธฐ๊ฐ ์ปค์ง ์๋ก ํ๋์ ์ธ๋ฑ์ค ํ์ด์ง๊ฐ ๋ด์ ์ ์๋ ์ธ๋ฑ์ค ํค ๊ฐ์ ๊ฐ์ ๊ฐ์ ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ์ ๋ ์ฝ๋ ๊ฑด์๋ผ๋ B-Tree๊น์ด๊ฐ ๊น์ด์ ธ์ ๋์คํฌ ์ฝ๊ธฐ ์๊ฐ ์ฆ๊ฐ
3. ์ ํ๋(๊ธฐ์์ฑ Cardinality)
- ์ธ๋ฑ์ค ํค ๊ฐ ๊ฐ์ด๋ฐ ์ ๋ํฌ ํ ๊ฐ์ ์
- ์ ๋ํฌํ ๊ฐ์ ๊ฐ์๊ฐ ๋ฎ์ ์๋ก ๊ฒ์ ๋์์ด ์ฆ๊ฐํ๋ฏ๋ก ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ๋ ์์๊ฐ ๋จ
4. ์ฝ์ด์ผ ํ๋ ๋ ์ฝ๋์ ๊ฑด์
- ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ง์ ์ฝ๋๊ฒ๋ณด๋ค ์ธ๋ฑ์ค๋ฅผ ํตํด ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ฝ๋ ๊ฒ์ด ๋์ ๋น์ฉ์ ์์
- ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฝ์ด์ผ ํ๋ ๋ ์ฝ๋ ์๊ฐ ์ ์ฒด ์ค 20 ~ 25%๋ฅผ ๋์ด๊ฐ๋ฉด ํ ์ด๋ธ์ ์ ์ฒด ๋ ์ฝ๋๋ฅผ ์กฐํํ๋ ๊ฒ ํจ์จ์
B-Tree ์ธ๋ฑ์ค๋ฅผ ํตํ ๋ฐ์ดํฐ ์ฝ๊ธฐ
MySQL์ด ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ๋ ์ฝ๋๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ ์๊ฐ
1. ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
์ธ๋ฑ์ค ์ ๊ทผ ๋ฐฉ๋ฒ ์ค ๋ํ์ ์ด๋ฉฐ ๋น ๋ฅธ ๋ฐฉ๋ฒ
Btree์ ํ์ํ ์์ญ์ ์ค์บํ๋ ๋ฐฉ๋ฒ
Root → Branch → Leaf Node๋ฅผ ์ฐจ๋ก๋๋ก ์ค์บํ์ฌ ํ์ํ Leaf Node๋ง ์ค์บํ๋ ๋ฐฉ์
Leaf Node์์ ์ ์ฅ๋ ๋ ์ฝ๋ ์ฃผ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ฌ ๋ ๋ ์ฝ๋๋ง๋ค random I/O๊ฐ ๋ฐ์ํ์ฌ ์ธ๋ฑ์ค๋ก ์ฝ์ด์ผ ํ ๋ฐ์ดํฐ๊ฐ ์ ์ฒด์ 20 ~ 25%๊ฐ ๋๋๋ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ ์ฝ๋๋ฅผ ์ฝ๊ธฐ๋ณด๋ค๋ ํ ์ด๋ธ์ ํตํด ์ง์ ์ฝ๋ ๊ฒ์ด ํจ์จ์
2. ์ธ๋ฑ์ค ํ ์ค์บ
- ์ธ๋ฑ์ค์ ์ฒ์๋ถํฐ ๋๊น์ง ๋ชจ๋ ์ฝ๋ ๋ฐฉ์
- ์ฟผ๋ฆฌ์ ์กฐ๊ฑด์ ์ ์ฌ์ฉ๋ ์นผ๋ผ์ด ์ธ๋ฑ์ค์ ์ฒซ ๋ฒ์จฐ ์นผ๋ผ์ด ์๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํ ์ค์บ ๋ฐฉ์์ด ์ฌ์ฉ
- ์) index ๊ตฌ์ฑ : column A, column B, column C ์ฟผ๋ฆฌ ์กฐ๊ฑด์ ์ฌ์ฉ๋ ์นผ๋ผ : column B, column C
- ์ธ๋ฑ์ค์ ์ค์ ๋ ์นผ๋ผ๋ง์ผ๋ก ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฝ์ ์ ์์ ๋ ์ธ๋ฑ์ค ํ ์ค์บ์ด ์ ์ฉ
- ํ ์ด๋ธ ํ ์ค์บ > ์ธ๋ฑ์ค ํ ์ค์บ > ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
3. ๋ฃจ์ค(Loose) ์ธ๋ฑ์ค ์ค์บ
- Loose์ ๋ง๋ป์ฒ๋ผ ๋ฌ์ฑ๋ฌ์ฑ ์ธ๋ฑ์ค๋ฅผ ์ค์บํ๋ ๋ฐฉ์
- MySQL 8.0๋ถํฐ ์ง์๋๋ฉฐ ๋ค๋ฅธ ์์ฉ RDBMS์ ์ธ๋ฑ์ค ์คํต ์ค์บ๊ณผ ์ ์ฌ
- ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ๊ณผ ์ ์ฌ ํ์ง๋ง ์ค๊ฐ์ค๊ฐ ํ์ํ์ง ์์ ์ธ๋ฑ์ค ํค๊ฐ์ ๋ฌด์ํ๊ณ ๋ค์ ํ์ํ ์ธ๋ฑ์ค๋ฅผ ์ฝ์
4. ์ธ๋ฑ์ค ์คํต ์ค์บ
ALTER TABLE employees ADD INDEX ix_gender_birth(gender, birth_date);
employeesํ ์ด๋ธ์ gender, birth๋ก ๊ตฌ์ฑ๋ ๊ฒฐํฉ์นผ๋ผ ์ธ๋ฑ์ค ์์ฑ
ํ์ง๋ง ์๋ ์ฟผ๋ฆฌ์์๋ ์์์ ์์ฑํ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ธ๋ฑ์ค์ ์ฒซ ๋ฒ์งธ ์นผ๋ผ์ด where์ ์ ๊ฒ์์กฐ๊ฑด์ผ๋ก ์์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ธ๋ฑ์ค ์คํต ์กฐ๊ฑด์ ํตํด ์๋์ ์ฟผ๋ฆฌ์์๋ ์ธ๋ฑ์ค์ ์ ๊ทผ๊ฐ๋ฅํ๊ฒ ํ ์ ์๋ค.
-- ์ธ๋ฑ์ค ์ฌ์ฉ ๋ชปํจ
SELECT * FROM employees WHERE birth_date >= '1995-01-01';
-- ์ธ๋ฑ์ค ์ฌ์ฉ ๊ฐ๋ฅ
SELECT * FROM employees WHERE gender = 'M' AND birth_date >= '1995-01-01';
MySQL 8.0๋ถํฐ ๋์ ๋ ์ธ๋ฑ์ค ์ค์บ ์ค์ ํ์ฑํ๋ฅผ ํตํด ์์ ์ฟผ๋ฆฌ์์๋ ์ธ๋ฑ์ค์ ์ ๊ทผ๊ฐ๋ฅํ๊ฒ ํ ์ ์๋ค.
SET optimizer_swithch='skip_scan'=on';
gender์์ ์ ๋ํฌ ๊ฐ์ ๋ชจ๋ ์กฐํํด ์์ ์ฟผ๋ฆฌ ์คํ ์ gender์ ๋ํ ์กฐ๊ฑด์ ์ถ๊ฐํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ๋ค์ ์คํํ๋ค.
์กฐ๊ฑด์ ์ ๋น ์ง ์ธ๋ฑ์ค ์นผ๋ผ์ distinct value ๊ฐ์๊ฐ ์ ๊ณ ํํ ์ปฌ๋ผ์ distinct value ๊ฐ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ฌ์ฉ ์ ๋ฆฌ
→ distinct value ๊ฐ์๊ฐ ์ ๋ค
์) ์ปฌ๋ผ gender : ‘M’, ‘W’์ฒ๋ผ ์ค๋ณต ์์ด ๊ฐ์ด ์ ์ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.
[์ฐธ๊ณ ]
real MySQL 8.0
http://wiki.gurubee.net/pages/viewpage.action?pageId=4949506
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=weekamp&logNo=221600846268
'DB > RDBMS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Transaction Isolation ๋ ๋ฒจ (0) | 2023.01.09 |
---|---|
Mysql - InnoDB ์คํ ๋ฆฌ์ง ์์ง ์ ๊ธ (0) | 2022.12.31 |
Transaction & Lock (0) | 2022.12.24 |
MySQL - InnoDB & MyISAM ์คํ ๋ฆฌ์ง ์์ง ์ํคํ ์ฒ (0) | 2022.12.05 |