๊ฐ์
MySQL์ ๋ฌธ์์ด๋ฐ์ดํฐ ํ์ ์ค VARCHAR์ TEXT๋ ์๋นํ ํํ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋์ VARCHAR๋ 255byte๋ง ์ง์ํ์ง๋ง, MySQL 5.0.3 ์ดํ๋ก VARCHAR์ TEXT ํ์ ๋ชจ๋ ์ต๋ 65,535byte ๊ธธ์ด๋ฅผ ์ง์ํ๊ฒ ๋์์ต๋๋ค.
VARCHAR์ TEXT๋ ๋ ๋ค ๋ฌธ์์ด์ ์ ์ฅํ๊ธฐ ์ํ ๋ฐ์ดํฐ ํ์ ์ด๋ฉฐ, ๋์ ์ฃผ์ ์ฐจ์ด์ ๊ณผ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์ฅ ์ฉ๋
VARCHAR์ ์ ์ฅ ๊ตฌ์กฐ
VARCHAR๋ ์ต๋ 65,535byte๊น์ง ์ ์ฅ์ด ๊ฐ๋ฅํ๋ฉฐ, '(ํ์ฌ ์ ์ฅ๋ byte์ ํฌ๊ธฐ) + (๊ธธ์ด๋ฅผ ํํํ๋ byte)'๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด 'apple'์ ๊ฒฝ์ฐ, ๋ฌธ์์ด 'apple'์ 5byte์ด๋ฉฐ, ๊ทธ ๊ธธ์ด๋ฅผ ํํํ๋ ๋ฐ์ดํธ๋ 1byte์ด๋ฏ๋ก ์ด 6byte๊ฐ ํ์ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฃผ๋ชฉํ ์ ์ ๋ฌธ์์ด์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๊ธธ์ด๋ฅผ ํํํ๋ ์ ๋์ฌ์ ๋ฐ์ดํธ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ค๋ ๊ฒ์ ๋๋ค.
- 255byte ์ดํ์ ๋ฐ์ดํฐ ์ ์ฅ: ๊ธธ์ด ์ ๋์ฌ๋ก 1byte๋ฅผ ์ฌ์ฉ, ์ค์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ ์ต๋ 65,534byte๋ฅผ ์ฌ์ฉ
- 255byte๋ฅผ ์ด๊ณผํ๋ ๋ฐ์ดํฐ ์ ์ฅ: ๊ธธ์ด ์ ๋์ฌ๋ก 2byte๋ฅผ ์ฌ์ฉ, ์ค์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ ์ต๋ 65,532byte ์ฌ์ฉ
CREATE TABLE user_varchar (
id BIGINT NOT NULL,
name VARCHAR(4000), -- 2๋ฐ์ดํธ์ ๊ธธ์ด ์ ๋์ฌ + 4000๋ฐ์ดํธ์ ๋ฌธ์์ด
phone_no VARCHAR(4000),
address VARCHAR(4000),
email VARCHAR(4000),
PRIMARY KEY(id)
);
TEXT์ ์ ์ฅ ๊ตฌ์กฐ
TEXT๋ ์ต๋ 65,535 ๋ฐ์ดํธ๊น์ง ์ ์ฅํ ์ ์์ง๋ง, VARCHAR์ ๋ฌ๋ฆฌ ๋ฌด์กฐ๊ฑด ๊ธธ์ด ์ ๋์ฌ๋ก 2๋ฐ์ดํธ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ค์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ ์ต๋ 65,533 ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
CREATE TABLE user_text (
id BIGINT NOT NULL,
name TEXT, -- 2๋ฐ์ดํธ์ ๊ธธ์ด ์ ๋์ฌ + 65,533๋ฐ์ดํธ์ ๋ฌธ์์ด
phone_no TEXT,
address TEXT,
email TEXT,
PRIMARY KEY(id)
);
์ ์ฅ ๋ฐฉ์
InnoDB ์คํ ๋ฆฌ์ง ์์ง์์๋ Inline๊ณผ Off-Page ์คํ ๋ฆฌ์ง๊ฐ ์กด์ฌํฉ๋๋ค.
- Inline ์คํ ๋ฆฌ์ง๋ ๋ฐ์ดํฐ๊ฐ ๋ ์ฝ๋ ๋ด๋ถ์ ์ง์ ์ ์ฅ๋๋ ๋ฐฉ์์ ๋๋ค. ๊ณต๊ฐ ์ฌ์ฉ ํจ์จ์ด ๋์, ์งง์ ๋ฌธ์์ด ์ ์ฅ์ ํจ๊ณผ์ ์ ๋๋ค.
- Off-Page ์คํ ๋ฆฌ์ง๋ ๋ฐ์ดํฐ๊ฐ ๋ ์ฝ๋ ์ธ๋ถ, ๋ณ๋์ ๊ณต๊ฐ์ ์ ์ฅ๋๋ฉฐ ๋ ์ฝ๋ ๋ด๋ถ์๋ ํด๋น ๋ฐ์ดํฐ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ์ ์ฅ๋ฉ๋๋ค.
InnoDB๋ TEXT์ VARCHAR ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋, ๊ทธ ๋ฐ์ดํฐ์ ๊ธธ์ด๊ฐ ํน์ ์๊ณ๊ฐ์ ๋์ง ์๋๋ค๋ฉด Inline๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
InnoDB ์คํ ๋ฆฌ์ง ์์ง์ 'ํ์ด์ง'๋ผ ๋ถ๋ฆฌ๋ ๋ธ๋ก ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด ํ์ด์ง์ ํฌ๊ธฐ๋ 16KB์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ 16KB๊ฐ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ด ์๋๋ผ, ํ์ด์ง์ ์ผ๋ถ๋ ํค๋, ํธ๋์ญ์ ์ ๋ณด, ๋๋ ํ ๋ฆฌ ๋ฑ์ ์์คํ ์ ๋ณด์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์, ์ค์ ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์ ์๋ ๊ณต๊ฐ์ ํ์ด์ง ํฌ๊ธฐ์ ์ ๋ฐ์ ๋๋ค. ๋ฐ๋ผ์ 16KB ํ์ด์ง์์๋ ์ฝ 8,117๋ฐ์ดํธ๊ฐ ๋ฐ์ดํฐ ์ ์ฅ์ ์ฌ์ฉ๋ ์ ์๊ณ , 16KB์์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์๊ณ๊ฐ์ธ 8,117๋ฐ์ดํธ๋ฅผ ์ด๊ณผํ๋ฉด Off-Page๋ก ์ ์ฅํ๊ฒ ๋ฉ๋๋ค.
MySQL์ InnoDB rrow_format์ ๋ฐ๋ผ Off-Page ์ ์ฅ ์ ๋ต์๋ ์ฐจ์ด๊ฐ ์์ ์ ์์ต๋๋ค. ๋์ฑ ์์ธํ ์ ๋ณด์, ํ์ด์ง ํฌ๊ธฐ๊ฐ 64KB์ธ ๊ฒฝ์ฐ์ ์์ธ ์ฌํญ ๋ฑ์ MySQL ๊ณต์ ๋ฌธ์์์ ํ์ธํ ์ ์์ต๋๋ค.
์ธ๋ฑ์ฑ
VARCHAR๋ ์ ์ฒด ๋ฌธ์์ด์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ ์ ํํ๋ ํน์ ๊ธธ์ด ๋ด์์๋ ์ ์ฒด ๋ฌธ์์ด์ ๋ํด ์์ฑํ ์ ์์ต๋๋ค.
InnoDB ์คํ ๋ฆฌ์ง ์์ง์ ํ์ฉํ๋ MySQL์์๋ ์ธ๋ฑ์ค ํญ๋ชฉ์ ์ต๋ ํฌ๊ธฐ๊ฐ 767 ๋ฐ์ดํธ๋ก ์ ํ๋์ด ์์ต๋๋ค.
- UTF-8mb4 ๋ฌธ์์ ์ ์ฌ์ฉ: ํ ๋ฌธ์๋น ์ต๋ 4๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ ์ ์์ด, ์ด๋ชจํฐ์ฝ์ ํฌํจํ ๋ฌธ์๋ค์ ํํํ ์ ์์ต๋๋ค. ์ต๋ 191์(191 * 4 = 764 ๋ฐ์ดํธ)๊น์ง์ VARCHAR ์ปฌ๋ผ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- UTF-8 ๋ฌธ์์ ์ ์ฌ์ฉ: ํ ๋ฌธ์๋น ์ต๋ 3๋ฐ์ดํธ๊ฐ ํ ๋น๋ฉ๋๋ค. ๋ฐ๋ผ์ 255์(255 * 3 = 765)๊น์ง์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ฐ๋ฉด์, TEXT ๋ฐ์ดํฐ ํ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฒด ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์๊ณ , ๋ฐ๋์ ์ผ์ ๊ธธ์ด๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ฌ์ผ๋ง ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
CREATE INDEX idx_column_name ON table_name(column_name(100));
์ฌ๊ธฐ์ 100์ TEXT ์ปฌ๋ผ์ ์ฒ์ 100์๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๊ฒ ๋ค๋ ์๋ฏธ์ ๋๋ค. TEXT ํ์ ์ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ ๋, ์ธ๋ฑ์ค๋ก ์ฌ์ฉ๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
MySQL ์๋ฒ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์คํ ๋ฆฌ์ง ์์ง๊ณผ Handler API๋ฅผ ์ด์ฉํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ค์ํ ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก 'records[2]'๋ผ๋ ๋ฐฐ์ด์ ๋๋ค. 'records[2]' ๋ฐฐ์ด์ MySQL์ ํต์ฌ ๊ตฌ์กฐ ์ค ํ๋์ธ TABLE ๊ตฌ์กฐ์ฒด ๋ด์ ์์นํ๋ฉฐ, MySQL ์์ง๊ณผ InnoDB ์คํ ๋ฆฌ์ง ์์ง์ด ๋ ์ฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉํ๋ ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํฌ์ธํฐ๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ํฌ์ธํฐ๋ ํ์ฌ ์์ ์ค์ธ ๋ ์ฝ๋๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, ๋ ๋ฒ์งธ ํฌ์ธํฐ๋ ๋ง์ง๋ง์ผ๋ก ์ฒ๋ฆฌ๋ ๋ ์ฝ๋๋ฅผ ์ฐธ์กฐํฉ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ ๋์์ ์ฌ๋ฌ ์ปค๋ฅ์ ์์ ๋ฐ์ํ๋ ์ฐ์์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ค๊ณ๋์์ผ๋ฉฐ, MySQL ์๋ฒ์ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ฐ์ดํฐ์ ํ์ ์ ๋ฐ๋ผ 'records[2]'์์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ์์ด ๋ฌ๋ผ์ง๋๋ค. VARCHAR์ ๊ฐ์ด ์ฌ์ ์ ํฌ๊ธฐ๊ฐ ์ ์๋ ๋ฐ์ดํฐ ํ์ ์ ๊ฒฝ์ฐ, 'records[2]'์ ํ ๋น๋ ๊ณ ์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด๋ VARCHAR ํ์ ์ ๊ฒฝ์ฐ ํฌ๊ธฐ๊ฐ ์ ํด์ ธ ์์ด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๋น๊ต์ ๋จ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฐ๋ฉด์ TEXT๋ BLOB๊ณผ ๊ฐ์ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ธ LOB ๋ฐ์ดํฐ ํ์ ์ ๊ทธ ํฌ๊ธฐ๊ฐ 'records[2]'์ ํ ๋น ๋ฒ์๋ฅผ ์ด๊ณผํ ์ ์๊ธฐ ๋๋ฌธ์, ํ์์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ฒ ๋ฉ๋๋ค. ์ด๋ LOB ๋ฐ์ดํฐ ํ์ ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ๋ณ๋์ ์ด์ด์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ํ, VARCHAR ๋ฐ์ดํฐ๊ฐ ๋งค์ฐ ํฌ๊ฒ ๋์ด Off-Page ์ ์ฅ์ด ํ์ํ๊ฒ ๋๋ฉด, ์ด ๊ฒฝ์ฐ 'records[2]'์ ๊ธฐ์กด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฏ๋ก ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ํ์ํ๊ฒ ๋ฉ๋๋ค.
์ฑ๋ฅ ํ์ธ ๋ถ๊ฐ
LOB(Large Object) ๋ฐ์ดํฐ ํ์ ์ ํฐ ๋ฌธ์์ด ๋๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, MySQL์์๋ ์ด์ ํด๋นํ๋ ๋ฐ์ดํฐ ํ์ ์ผ๋ก TEXT์ BLOB์ด ์์ต๋๋ค.
MySQL 8.0.33 ๋ฒ์ ๊น์ง๋ Performance_schema์์ LOB์ปฌ๋ผ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ์ ๋ณด๋ฅผ ์ธก์ ํ์ง ์์ต๋๋ค. Performance_schema๋ MySQL์๋ฒ์ ๋ค์ํ ๋ด๋ถ ๋์์ ๋ํ ์ฑ๋ฅ ๋ฐ ๋ชจ๋ํฐ๋ง ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ฑฐ๋ ๋ถ์ํ ๋, ์ด๋ฌํ LOB ๋ฐ์ดํฐ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจํด์ด๋ ๊ด๋ จ๋ ์ฑ๋ฅ ์ํฅ์ ์ง์ ํ์ธํ ์ ์๊ฒ ๋ฉ๋๋ค.
๋ง๋ฌด๋ฆฌ
MySQL ์๋ฒ์ ๋ด๋ถ์ ์ธ ์๋์์, VARCHAR์ TEXT ํ์ ์ ํฐ ์ฐจ์ด์ ์ ์ดํด๋ณด์์ต๋๋ค. ์ด ์ฐจ์ด์ ์ ๋ฐํ์ผ๋ก VARCHAR์ TEXT์ ์ ํ ๊ธฐ์ค์ ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
VARCHAR
- ๋ฐ์ดํฐ์ ์ต๋ ๊ธธ์ด๊ฐ ์๋์ ์ผ๋ก ์งง์ ๊ฒฝ์ฐ
- ํด๋น ์ปฌ๋ผ์ ๋ฐ์ดํฐ๊ฐ ํ ์ด๋ธ์ ์กฐํํ ๋๋ง๋ค ํญ์ ํ์ํ ๊ฒฝ์ฐ
- DBMS ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ (์๋์ ์ผ๋ก) ์ถฉ๋ถํ ๊ฒฝ์ฐ
TEXT
- ๋ฐ์ดํฐ์ ์ต๋ ๊ธธ์ด๊ฐ ์๋์ ์ผ๋ก ๊ธด ๊ฒฝ์ฐ
- ํ ์ด๋ธ์์ ๊ธด ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ ์ปฌ๋ผ์ด ์ฌ๋ฌ ๊ฐ ํ์ํ ๊ฒฝ์ฐ
- ํด๋น ์ปฌ๋ผ์ ๋ฐ์ดํฐ๊ฐ ํ ์ด๋ธ์ ์กฐํํ ๋๋ง๋ค ํ์ํ์ง ์์ ๊ฒฝ์ฐ
์ฐธ๊ณ
- https://medium.com/daangn/varchar-vs-text-230a718a22a1
- Real MySQL 8.0(2๊ถ)
'BackEnd๐ฑ > DB & SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker MySQL] Master-Slave Replication(๋ณต์ ) ๊ตฌ์ถํ๊ธฐ (0) | 2023.11.01 |
---|---|
[MySQL] MVCC๋ฅผ ํตํ ์ ๊ธ์๋ ์ฝ๊ธฐ (7) | 2023.10.07 |
[MySQL] ์ฌ์ฉ์ ์์ฑ ๋ฐ ๊ถํ ๋ถ์ฌ ๋ฐฉ๋ฒ (0) | 2023.10.06 |
Redis์ ๋ฐ์ดํฐ ํ์ , ๋ช ๋ น์ด์ ํ์ฉ ์ฌ๋ก (0) | 2023.09.05 |
์ค๋ฌด์์ Redisson์ ์ฐ๊ฒฐํ๋ฉด์ ๊ฒช์ ๋ฌธ์ ์ ๋ค (2) | 2023.08.18 |
Docker ์ปจํ ์ด๋์ MariaDB ์ค์นํ๊ธฐ (4) | 2023.05.12 |
๋๊ธ