Search

MySQL ๊ฐ์ฒด - ํŒŒํ‹ฐ์…˜

MySQL ํŒŒํ‹ฐ์…˜ ์™„์ „ ์ •๋ณต! ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋„ ์ฒ™์ฒ™ ๊ด€๋ฆฌํ•˜๊ธฐ

์ด ์˜์ƒ์€ MySQL์—์„œ ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ธย ํŒŒํ‹ฐ์…˜(Partition)ย ๊ฐœ๋…๊ณผ ์‹ค์ œ ์ ์šฉ ๋ฐฉ๋ฒ•์„ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด์ค๋‹ˆ๋‹ค. ํŒŒํ‹ฐ์…˜์ด ๋ฌด์—‡์ธ์ง€, ์™œ ํ•„์š”ํ•œ์ง€๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด, ๊ธฐ์กด ํ…Œ์ด๋ธ”์— ํŒŒํ‹ฐ์…˜์„ ์ ์šฉํ•˜๋Š” ์‹ค์Šต๊นŒ์ง€ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”.

๋ชฉ์ฐจ

1.
ํŒŒํ‹ฐ์…˜์ด๋ž€? ์™œ ํ•„์š”ํ• ๊นŒ? [00:00:14]
2.
ํŒŒํ‹ฐ์…˜ ์ƒ์„ฑ ๋ฐฉ๋ฒ•๊ณผ ์˜ˆ์‹œ [00:02:41]
3.
๊ธฐ์กด ํ…Œ์ด๋ธ”์— ํŒŒํ‹ฐ์…˜ ์ ์šฉํ•˜๊ธฐ - ๋ฐฑ์—…๊ณผ ๋ฐ์ดํ„ฐ ์ด๊ด€ [00:06:40]
4.
ํŒŒํ‹ฐ์…˜ ์ ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ - ๊ธฐ๋ณธํ‚ค์™€ ํŒŒํ‹ฐ์…”๋‹ ํ•จ์ˆ˜ [00:12:54]
5.
๋ฐ์ดํ„ฐ ์ด๊ด€ ๋ฐ ํŒŒํ‹ฐ์…˜ ํ™•์ธ ๋ฐฉ๋ฒ• [00:14:25]
6.
๋งˆ๋ฌด๋ฆฌ ์ •๋ฆฌ [00:18:25]

ํŒŒํ‹ฐ์…˜์ด๋ž€? ์™œ ํ•„์š”ํ• ๊นŒ? [00:00:14]

โ€ข
ํŒŒํ‹ฐ์…˜์€ ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์„ ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—์š”.
โ€ข
์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒŒ์‹œํŒ์— 500๋งŒ ๊ฑด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ, ์ด๊ฑธ ํ•œ๊บผ๋ฒˆ์— ๊ฒ€์ƒ‰ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ฃ ?
โ€ข
ํŒŒํ‹ฐ์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด 500๋งŒ ๊ฑด์„ 100๋งŒ ๊ฑด์”ฉ ์ชผ๊ฐœ์„œ ์ €์žฅํ•ด, ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์–ด์š”.
โ€ข
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์กฐํšŒ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ , ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ๋„ ํŒŒํ‹ฐ์…˜ ๋‹จ์œ„๋กœ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

ํŒŒํ‹ฐ์…˜ ์ƒ์„ฑ ๋ฐฉ๋ฒ•๊ณผ ์˜ˆ์‹œ [00:02:41]

โ€ข
ํŒŒํ‹ฐ์…˜์€ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œย CREATE TABLEย ๋ฌธ์—ย PARTITION BYย ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.
โ€ข
์˜ˆ์‹œ: ์ž…์‚ฌ์ผ์ž(๊ณ ์šฉ์ผ์ž)์˜ ์—ฐ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒŒํ‹ฐ์…˜์„ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•
CREATE TABLE employees ( ... ) PARTITION BY RANGE (YEAR(hire_date)) ( PARTITION p2020 VALUES LESS THAN (2021), PARTITION p2021 VALUES LESS THAN (2022), PARTITION pmax VALUES LESS THAN MAXVALUE );
SQL
๋ณต์‚ฌ
โ€ข
์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ…Œ์ด๋ธ”์—๋Š” ๋ฐ”๋กœ ํŒŒํ‹ฐ์…˜์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์–ด๋ ต๊ณ , ๋ณดํ†ต ๋ฐฑ์—… ํ›„ ์ƒˆ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ์•ผ ํ•ด์š”.

๊ธฐ์กด ํ…Œ์ด๋ธ”์— ํŒŒํ‹ฐ์…˜ ์ ์šฉํ•˜๊ธฐ - ๋ฐฑ์—…๊ณผ ๋ฐ์ดํ„ฐ ์ด๊ด€ [00:06:40]

โ€ข
๊ธฐ์กด ํ…Œ์ด๋ธ”์— ํŒŒํ‹ฐ์…˜์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•ด์š”:
1.
๊ธฐ์กด ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋ฐฑ์—… ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ
2.
ํŒŒํ‹ฐ์…˜์ด ์ ์šฉ๋œ ์ƒˆ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ
3.
๋ฐฑ์—… ํ…Œ์ด๋ธ”์—์„œ ์ƒˆ ํ…Œ์ด๋ธ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธฐ๊ธฐ (INSERT INTO ... SELECT)
โ€ข
์˜ˆ๋ฅผ ๋“ค์–ด,ย employeesย ํ…Œ์ด๋ธ”์„ย employees_backup์œผ๋กœ ์ด๋ฆ„ ๋ฐ”๊พธ๊ณ , ํŒŒํ‹ฐ์…˜ ์ ์šฉํ•œ ์ƒˆย employeesย ํ…Œ์ด๋ธ”์„ ๋งŒ๋“  ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ์š”.

ํŒŒํ‹ฐ์…˜ ์ ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ - ๊ธฐ๋ณธํ‚ค์™€ ํŒŒํ‹ฐ์…”๋‹ ํ•จ์ˆ˜ [00:12:54]

โ€ข
ํŒŒํ‹ฐ์…˜์„ ๋งŒ๋“ค ๋•Œ๋Š”ย ํŒŒํ‹ฐ์…”๋‹ ํ•จ์ˆ˜์— ์‚ฌ์šฉ๋œ ์ปฌ๋Ÿผ์ด ๊ธฐ๋ณธํ‚ค(Primary Key)์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ทœ์น™์ด ์žˆ์–ด์š”.
โ€ข
์˜ˆ๋ฅผ ๋“ค์–ด,ย hire_date๋กœ ํŒŒํ‹ฐ์…˜์„ ๋‚˜๋ˆˆ๋‹ค๋ฉด,ย hire_dateย ์ปฌ๋Ÿผ๋„ ๊ธฐ๋ณธํ‚ค์— ํฌํ•จ๋˜์–ด์•ผ ์—๋Ÿฌ ์—†์ด ์ƒ์„ฑ ๊ฐ€๋Šฅํ•ด์š”.
โ€ข
์ด ๋ถ€๋ถ„์„ ๋†“์น˜๋ฉด "ํŒŒํ‹ฐ์…”๋‹ ํŽ‘์…˜์— ๊ธฐ๋ณธํ‚ค๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค"๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋‹ˆ ๊ผญ ํ™•์ธํ•˜์„ธ์š”!

๋ฐ์ดํ„ฐ ์ด๊ด€ ๋ฐ ํŒŒํ‹ฐ์…˜ ํ™•์ธ ๋ฐฉ๋ฒ• [00:14:25]

โ€ข
๋ฐฑ์—… ํ…Œ์ด๋ธ”์—์„œ ์ƒˆ ํŒŒํ‹ฐ์…˜ ํ…Œ์ด๋ธ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธธ ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ ํ•ด์š”:
INSERT INTO employees SELECT * FROM employees_backup;
SQL
๋ณต์‚ฌ
โ€ข
๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„๋„ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•œ ๋ฒˆ์— ์˜ฎ๊ธธ ์ˆ˜ ์žˆ์–ด์š”.
โ€ข
ํŒŒํ‹ฐ์…˜์ด ์ œ๋Œ€๋กœ ์ ์šฉ๋๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉดย information_schema.PARTITIONSย ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋ฉด ๋ผ์š”:
SELECT * FROM information_schema.PARTITIONS WHERE TABLE_NAME = 'employees';
SQL
๋ณต์‚ฌ
โ€ข
์ด ์ฟผ๋ฆฌ๋กœ ๊ฐ ํŒŒํ‹ฐ์…˜์ด ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ ์ •๋ฆฌ [00:18:25]

โ€ข
ํŒŒํ‹ฐ์…˜์€ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ!
โ€ข
ํ…Œ์ด๋ธ”์„ ์—ฌ๋Ÿฌ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๊ฒ€์ƒ‰ ์†๋„์™€ ๋ณต๊ตฌ ํŽธ์˜์„ฑ์„ ๋†’์—ฌ์ค˜์š”.
โ€ข
๊ธฐ์กด ํ…Œ์ด๋ธ”์— ํŒŒํ‹ฐ์…˜์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋ฐฑ์—…, ์ƒˆ ํ…Œ์ด๋ธ” ์ƒ์„ฑ, ๋ฐ์ดํ„ฐ ์ด๊ด€ ๊ณผ์ •์„ ๊ผญ ๊ฑฐ์ณ์•ผ ํ•ด์š”.
โ€ข
ํŒŒํ‹ฐ์…˜ ์ปฌ๋Ÿผ์€ ๊ธฐ๋ณธํ‚ค์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ๋„ ์žŠ์ง€ ๋งˆ์„ธ์š”!
โ€ข
๋งˆ์ง€๋ง‰์œผ๋กœย information_schema.PARTITIONS๋ฅผ ํ†ตํ•ด ํŒŒํ‹ฐ์…˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
์ด์ œ ์—ฌ๋Ÿฌ๋ถ„๋„ MySQL์—์„œ ํŒŒํ‹ฐ์…˜์„ ํ™œ์šฉํ•ด ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์˜ ๊ณ ์ˆ˜๊ฐ€ ๋  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋„ค์š”!
๊ถ๊ธˆํ•œ ์ ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”~ ์ฆ๊ฑฐ์šด ์ฝ”๋”ฉ ๋˜์„ธ์š”!