MySQL ํํฐ์
์์ ์ ๋ณต! ๋์ฉ๋ ๋ฐ์ดํฐ๋ ์ฒ์ฒ ๊ด๋ฆฌํ๊ธฐ
์ด ์์์ MySQL์์ ๋์ฉ๋ ํ
์ด๋ธ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ธย ํํฐ์
(Partition)ย ๊ฐ๋
๊ณผ ์ค์ ์ ์ฉ ๋ฐฉ๋ฒ์ ์ฝ๊ฒ ์ค๋ช
ํด์ค๋๋ค. ํํฐ์
์ด ๋ฌด์์ธ์ง, ์ ํ์ํ์ง๋ถํฐ ์์ํด, ๊ธฐ์กด ํ
์ด๋ธ์ ํํฐ์
์ ์ ์ฉํ๋ ์ค์ต๊น์ง ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์ธ ์ ์์ด์.
๋ชฉ์ฐจ
1.
2.
3.
4.
5.
6.
ํํฐ์
์ด๋? ์ ํ์ํ ๊น? [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์์ ํํฐ์
์ ํ์ฉํด ๋์ฉ๋ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ๊ณ ์๊ฐ ๋ ์ค๋น๊ฐ ๋์๋ค์!
๊ถ๊ธํ ์ ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์~ ์ฆ๊ฑฐ์ด ์ฝ๋ฉ ๋์ธ์! 
