2023. 2. 28. 17:11ใ๐พBackEnd/โ DataBase
์ธ๋ฑ์ค๋ฅผ ์ ์ฌ์ฉํด์ผ ๋๋์ง ์๊ธฐ ์ํด์๋ ๋์คํฌ ์ฝ๊ธฐ ๋ฐฉ์์ ๋ํด ๊ณต๋ถ๋ฅผ ํด์ผ๋๋ค.
์ด ํฌ์คํธ๋ ์ธ๋ฑ์ค์ ๊ด๋ จ๋ ๋ด์ฉ์ด๊ธฐ ๋๋ฌธ์ ๋์คํฌ ์ฝ๊ธฐ ๋ฐฉ์์ ๋ํด ๊ฐ๋จํ๊ฒ ์ค๋ช
ํ๊ณ ๋์ด๊ฐ๊ฒ ๋ค.
2๊ฐ์ ์ฝ๊ธฐ ๋ฐฉ์์ ์ดํดํ๋ฉด ์ข์๋ฐ ๋๋คI/O์ ์์ฐจI/0 ๋ฐฉ์์ด๋ค.
- ๋๋คI/O๋ฐฉ์๊ณผ ์์ฐจI/O ๋ฐฉ์์ ๊ณตํต์ ์ธ ํ๋์ด ์๋๋ฐ ํ๋ํฐ๋ฅผ ๋๋ ค์ ์ฝ์ด์ผ ํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋
- ์์น๋ก ๋์คํฌ ํค๋๋ฅผ ์ด๋์ํจ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค.
- ํ์ง๋ง ์ฌ๊ธฐ์ ์ฐจ์ด๊ฐ ๋๋ ๋ถ๋ถ์ ์์ฐจI/O๋ 1๋ฒ์ ์์คํ ์ฝ์ ํธ์ถํ๊ณ
- ๋๋คI/O๋ 3๋ฒ์ ํธ์ถ์ ํ์๋ค.

์ด๋ ๊ฒ ์ดํด๋ณด๋ฉด ์์ฐจI/O๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์จ์ด ์ข๊ฒ ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋คI/O๋ฅผ ์ฌ์ฉํ๊ณ ์๋ MySQL์
ํ์ค์ ํน์ฑ์ ์์ฐจI/O๋ก ๋ณ๊ฒฝํ๊ธฐ๋ ์ด๋ ต๋ค.
๊ทธ๋์ ๋๋คI/O๋ฅผ ์ฌ์ฉ์ ํ๋ฉด์ ์ ๊ทผํ๋ ROW์ ๊ฐฏ์๋ฅผ ์ค์ด๊ธฐ ์ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค.
์ธ๋ฑ์ค
์ธ๋ฑ์ค๋ ํ ์ด๋ธ์ ๋์์๋(์กฐํ)๋ฅผ ๋์ฌ์ฃผ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ธ๋ฑ์ค๋ก ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์์ฃผ๋ ์ญํ ์ด๊ณ ์ฝ๊ฒ ์๋ฅผ ๋ค์ด๋ณด๋ฉด ์ฑ ๋ทํธ์ '์์ธ'์ด ์ธ๋ฑ์ค์ ์ญํ ๊ณผ ๋์ผํ๋ค๊ณ ๋ณผ ์ ์๋ค.

์ธ๋ฑ์ค๋ MySQL Index ํ์ผ์ ์ ์ฅ๋๋ฉฐ, ์ธ๋ฑ์ค๊ฐ ์ค์ ๋์ง ์์๋ค๋ฉด Table Full Scan์ด ์ผ์ด๋ ์ฑ๋ฅ์ด ์ ํ๋๊ฑฐ๋ ์น๋ช ์ ์ธ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค.
์กฐํ์๋๋ ๋นจ๋ผ์ง์ง๋ง Write์ ์๋๋ ์ ํ๋๋ค๋ ๋จ์ ์ด ์๋ค.
(Table์ index ์์ธ ์ ๋ณด๋ฅผ ๊ฐฑ์ ํ๋ ์ถ๊ฐ์ ์ธ ๋น์ฉ ์์)
๋๋ฌธ์ ํจ์จ์ ์ธ ์ธ๋ฑ์ค ์ค๊ณ๋ก ๋จ์ ์ ์ต๋ํ ๋ณด์ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณผ ์ ์๋ค.
๐คจ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ Read๊ฐ ๋น ๋ฅด์ง?
์ ์ฌ์ง์ ๋ณด๋ฉด ์ธ๋ฑ์ค๋ฅผ ๊ฑธ๊ฒ ๋๋ฉด ๊ฐ์ ๊ฐ์ Pointer๋ฅผ ์ค์ ์ ํ๊ฒ ๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด Read์ ํจ์จ์ด ์์นํ๋ค. ์ผ์ชฝ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด ํ์์ ํ๊ณ ์ค๋ฅธ์ชฝ์ ์ธ๋ฑ์ค๊ฐ ์๋ค๊ณ ์๊ฐํ๊ณ 2022-4-17์ ์ฐพ์๋ณด์ ์ง๋๊ฐ๋ ์ฒ ์๊ฐ ๋ด๋ ์ผ์ชฝ์ด ์ฐพ๊ธฐ ์ฌ์ด๊ฑธ ์ ์ ์๋ค.
1. ํ ์ด๋ธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ๋ํด ์ค๋ช
- ์ ์ ํ ์ด๋ธ์ ์์ฑํ์ฌ 10,000๊ฑด์ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ํ๋ค.
-- users ํ
์ด๋ธ ์์ฑ
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
PRIMARY KEY (id)
);
-- 10,000๊ฑด์ ๋๋ฏธ ๋ฐ์ดํฐ ์ฝ์
DELIMITER $$
DROP PROCEDURE IF EXISTS insert_users$$
CREATE PROCEDURE insert_users()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 10000 DO
INSERT INTO users (name, age) VALUES (CONCAT('User', i), FLOOR(RAND() * 80) + 20);
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL insert_users();
2. Age์ ์ธ๋ฑ์ค๊ฐ ์๋ ๋์ด๊ฐ 80์ด๊ณผ Select์ฟผ๋ฆฌ๋ฅผ ์คํ์ ํ์

SET profiling = 1;
-- ์ฟผ๋ฆฌ ์คํ
SELECT * FROM USERS WHERE AGE>80;
-- ์คํ ์๊ฐ ํ์ธ
SHOW PROFILES;
3. Age์ ์ธ๋ฑ์ค๋ฅผ ์์ฑ โ Select ์ฟผ๋ฆฌ

SHOW INDEX FROM ํ
์ด๋ธ;

4. ๋น๊ต
๋นจ๊ฐ์: Age์ Index(x)
๋ ธ๋์:Age์ Index(O)
๊ทธ๋ฐ๋ฐ ์ธ๋ฑ์ค๊ฐ ์๋ ๋ถ๋ถ์ด ์๊ฐ์ด ๋ ๊ธธ๋ค.
5. ์ธ๋ฑ์ค์ ๋ํด ๋ ์์๋ณด์
- ์ธ๋ฑ์ค๋ ๊ฒ์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ์ด ๋์ง๋ง ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ ํจ์จ์ ์ด์ง ์์ ์ ์๋ค.
- ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ์์ ๊ฒฝ์ฐ
- ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ฟผ๋ฆฌ
- ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ WHERE์ ์ธ ๊ฒฝ์ฐ
- ์ธ๋ฑ์ค์ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ: ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ ์ธ๋ฑ์ค์ ์ข ๋ฅ๋ ์ปฌ๋ผ์ ์์ ๋ฑ์ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์์ต๋๋ค.
๊ทธ๋์ ์ธ๋ฑ์ค๋ฅผ ์ต๋ํ ํ์ฉํด์ WHERE์ ์ ์ถ๊ฐํ๊ณ order by๋ฅผ ์ด์ฉํ๋ค.

์ธ๋ฑ์ค๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์๋ 3๊ฐ์ง
1. ์นด๋๋๋ฆฌํฐ

์นด๋๋๋ฆฌํฐ : ์๋์ ์ธ ์์น๋ก ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ณต๋๊ฐ ๋์ผ๋ฉด ์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ๊ณ , ์ค๋ณต๋๊ฐ ๋ฎ์ผ๋ฉด ์นด๋๋๋ฆฌํฐ๊ฐ ๋๋ค๊ณ ํํํ๋ค.
ํ ์ปฌ๋ผ์ด ๊ฐ๊ณ ์๋ ๊ฐ์ ์ค๋ณต ์ ๋๊ฐ ๋์ ์๋ก ์ข๋ค.
์๋ฅผ ๋ค์ด ์ค๋ช ํ๋ฉด ๋ง์ฝ์ ๋จ์ฌ , ์ฃผ๋ฏผ๋ฒํธ ์ด๋ ๊ฒ ๋ ์กฐ๊ฑด์ด ์๋ค๊ณ ์๊ฐ์ ํด๋ณด์. ๊ฒ์์ ํด์ผ๋๋๋ฐ ๋จ์ฌ๋ฅผ ๊ฒ์ํ๋ฉด 2๊ฐ๋ฅผ ํตํด ํน์ ๊ฐ์ ์ฐพ์์ผ ํ๋๋ฐ ์ด๋ ๊ฒ ๋๋ฉด 1์ฐจ ํํฐ๋ ๊ฐ๋ฅํ์ง๋ง ๊ทธ ์์์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ ์ฐพ์์ผ ํ๋ค.
ํ์ง๋ง ์ฃผ๋ฏผ๋ฒํธ๋ ๊ฐ์ด 1๊ฐ๋ง ์๊ธฐ ๋๋ฌธ์ ์ํ๋ ๊ฐ์ ๋ ์ฐพ๊ธฐ ์ฝ๋ค.
2. Update Frequency
- ์ธ๋ฑ์ค์ ์ ๋ฐ์ดํธ ๋น๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ๋ง์ฝ์ update๋ฅผ ๋ง์ด ํ๋ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ๊ทธ๋งํผ ์ธ๋ฑ์ค๋ ์์ ์ ํด์ผ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฑ๋ฅ์ ๋ํ ์ํฅ์ ์ฃผ๊ฒ ๋๋ค. ๊ทธ๋์ ์ธ๋ฑ์ค๋ฅผ ์ ํ์ ํ ๊ฒฝ์ฐ์๋ update์ ๋ํ ๋น๋๊ฐ ์ ์ ์ปฌ๋ผ์ ์ ํ์ ํ๋๊ฒ ์ข๋ค. MySQL์๋ ์ธ๋ฑ์ค ์ ๋ฐ์ดํธ ์ต์ ํํ๊ณ ์ฑ๋ฅ์ ๋ํ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํ ํ๊ธฐ ์ํด์ ๋ช๊ฐ์ง ๊ธฐ๋ฅ์ด ์๋๋ฐ ๋ํ์ ์ผ๋ก ์ง์ฐ ์ธ๋ฑ์ฑ์ด ์๋ค. ๊ฐ๋จํ๊ฒ ์ค๋ช ํด์ ํธ๋์ญ์ ์ด ๋๋ ๋๊น์ง ์ฐ๊ธฐ์์ผ ํ์ํ ์ ๋ฐ์ดํธ์๋ฅผ ์ค์ฌ ์ฑ๋ฅ์ ํฅ์์ ์ํค๋๊ฒ ๋ชฉ์ ์ด๋ค.
3.Size
์ธ๋ฑ์ค์ ํฌ๊ธฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ฃผ๋๋ฐ ์ธ๋ฑ์ค๊ฐ ๋๋ฌด ํฌ๋ฉด ์ฟผ๋ฆฌ ์๋๊ฐ ๋๋ ค์ง๊ณ ๋์คํฌ์ ์ฉ๋์ ๋ง์ด ์ฐจ์งํ๊ณ ๋๋ฌด ์์ผ๋ฉด ์ฟผ๋ฆฌ ์๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํฅ์์ํค์ง ๋ชปํ๋ค. ๊ทธ๋์ ์ธ๋ฑ์ค์ ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ๋๋๋ฐ ์ฟผ๋ฆฌ ์ต์ ํ์ ํ์ํ ์ด๋ง ํฌํจ์ ์ํค๋๊ฒ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค. (๋ฌผ๋ก ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค๋ ๋ง๋ค)
B- TREE


B- TREE๋ ๊ธฐ๋ณธ์ ์ผ๋ก ROOT, BRANCH, LEAF ๋ ธ๋๋ก ๊ตฌ์ฑ์ด ๋์ด์๋ค.
B-tree๋ Binary search tree์ ์ ์ฌํ์ง๋ง, ํ ๋ ธ๋ ๋น ์์ ๋ ธ๋๊ฐ 2๊ฐ ์ด์ ๊ฐ๋ฅํ๋ค.
B-TREE ํ์

B-TREE ์ถ๊ฐ(ํ์ด์ง ๋ถํ )
- ๋ฃจํธ ๋ ธ๋๋ ์ต์ 2๊ฐ ์ด์์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ๊น์ด A๋งํผ์ ์ฃผ์๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ๋ฆฌํ ๋ ธ๋๋ ๊น์ดM์ M-1๊ฐ์ ์ฃผ์๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ๋ธ๋์น ๋ ธ๋๋ ์ฐจ์D์ D/2๋ณด๋ค ํฌ๊ณ D๊น์ง ๊ฐ์ง ์ ์์ต๋๋ค.


B-TREE ์ญ์ (ํ์ด์ง ๋ถํ ) โ ์ฑ๋ฅ


'๐พBackEnd > โ DataBase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MySQL - ๊ฒฉ๋ฆฌ ์์ค (0) | 2023.02.28 |
---|---|
MYSQL - LOCK (0) | 2023.02.28 |
MySQL ์์ง ์ํคํ ์ฒ (0) | 2023.02.10 |