๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒพBackEnd/โœ…DataBase

MySQL - ์ธ๋ฑ์Šค

by MuGeon Kim 2023. 2. 28.
๋ฐ˜์‘ํ˜•

์ธ๋ฑ์Šค๋ฅผ ์™œ ์‚ฌ์šฉํ•ด์•ผ ๋˜๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ๋œ๋‹ค.
์ด ํฌ์ŠคํŠธ๋Š” ์ธ๋ฑ์Šค์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ ์ฝ๊ธฐ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ๋‹ค.

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. ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด์ž

  • ์ธ๋ฑ์Šค๋Š” ๊ฒ€์ƒ‰์— ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๋˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋” ํšจ์œจ์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  1. ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๊ฒฝ์šฐ
  2. ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฟผ๋ฆฌ
  3. ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” WHERE์ ˆ์ธ ๊ฒฝ์šฐ
  4. ์ธ๋ฑ์Šค์˜ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ: ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ธ๋ฑ์Šค์˜ ์ข…๋ฅ˜๋‚˜ ์ปฌ๋Ÿผ์˜ ์ˆœ์„œ ๋“ฑ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์œผ๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ธ๋ฑ์Šค๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•ด์„œ 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