2024. 1. 7. 19:45ใDatabase
Q. ์ญ์ ๊ทํ๋ฅผ ์ํํ๋ ์ด์ ๊ฐ ๋ฌด์์ธ๊ฐ์?
A. ํ ์ด๋ธ์ด ์ชผ๊ฐ์ ธ ์กฐ์ธ ์ฐ์ฐ์ด ์ฟผ๋ฆฌ ๋ด ํฌํจ๋๋ฉด ์ฑ๋ฅ์ด ์์ข์์ง๊ธฐ ๋๋ฌธ์, ์กฐํ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด์ ์ญ์ ๊ทํ๋ฅผ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
์ต๊ทผ ๋ฉด์ ์คํฐ๋ ์ค, ์ญ์ ๊ทํ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ํ๋ค๊ฐ ๋์จ ๋ฌธ๋ต์ด๋ค. ์ง๋ฌธ์ ๋ด๊ฐ, ๋ต๋ณ์ ์คํฐ๋์์ด ํด์ฃผ์ จ๋๋ฐ ๋ง์ฝ ์๋ก ์ ์ฅ์ด ๋ฐ๋์์ด๋ ๋๊ฐ์ด ๋๋ตํ์ ๊ฒ ๊ฐ๋ค.
Database๋ฅผ ๊ณต๋ถํ๋ฉด์, ํน์ ๊ฐ๋ฐ์ ์งํํ๋ฉด์ ํต๋ ์ฒ๋ผ ๋ฐ์๋ค์ด๊ฒ ๋๋ ๋ง์ด ๋ฐ๋ก ์กฐ์ธ์ ๋๋ฆฌ๋ค.์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ต๊ทผ์ ๋ค์ด์๋ Database์ ๋ํด ๋ ๊น๊ฒ ๊ณต๋ถํ ์ผ๋ค์ด ์๊ธฐ๋ฉด์ ์ด์ ์๋ฌธ์ด ์๊ฒผ๋ค.
์กฐ์ธ์ด ๋ง์ฝ ์ง์ง ๋๋ฆฐ๊ฑฐ๋ผ๋ฉด, ์ ๊ทธ๋ฐ๊ฑด๋ฐ?
๋ณดํต ์ด๋ ๊ฒ ๊น์ง ๋ฌผ์ด๋ณด๋ฉด ํ ์ด๋ธ ์ฌ๋ฌ๊ฐ๋ฅผ ๋ด์ผํ๋๊น.๋ผ๊ณ ๋ต๋ณ์ด ๋์์ค๋๋ฐ ์ด๋ฐ ๋๋ต์ ๋ด๊ฐ ์ํ๋ ๋๋ต์ด ์๋์๋ค. ์กฐ๊ธ ๋ ๊ธฐ์ ์ ์ด๊ณ ๋ช ํํ ๋ต๋ณ์ ์ํ๋ค. ๊ทธ๋ ๋ค๊ณ ๋ ์ค์ค๋ก์๊ฒ ์ด๋ฅผ ๋ฌผ์ด๋ณด๋ฉด ๋ช ๋ฐฑํ๊ฒ ๋ต๋ณ์ ํ ์ ์๋๋? ์๋ ๊ฒ ๊ฐ์๋ค. ๊ทธ๋์ ๋ ์ค์ค๋ก๋ผ๋ ์ด์ ๋ํ ๋ช ํํ ๋๋ต์ ํ ์ ์์ด์ง๊ธฐ ์ํด ์ด ํฌ์คํธ๋ฅผ ์์ฑํ๋ค.
์กฐ์ธ์ ๋๋ฆฌ๋ค์ ๋ํ ์ถ๋ก
DB๊ฐ ์กฐ์ธ ๋ฌธ์ ๋ง๋ฌ์ ๋ ์๋ํ๋ ๋ฐฉ์์ผ๋ก๋ NL ์กฐ์ธ, ์ํธ ๋จธ์ง ์กฐ์ธ, ํด์ ์กฐ์ธ ๋ฑ์ด ์กด์ฌํ๋ค. ์ธ๋ถ์ ์ธ ์๋ ๋ฐฉ์์ ์ ํ(Driving), ํํ(Driven) ๊ฐ๊ฐ ํ ์ด๋ธ ๋ด ํ์ฉํ ๋งํ ์ธ๋ฑ์ค์ ์กด์ฌ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ฒ ์ง๋ง, ์ด๋ค์ ๋ชจ๋ ์ ํ ํ ์ด๋ธ์์ ํ์ํ ๋ฐ์ดํฐ๋ง์ ๋ฝ์๋ธ ๋ค์ ์ด๋ฅผ ํ ๋๋ก ํํ ํ ์ด๋ธ์ ์ ๊ทผํ๋ค๋ ํฐ ๊ทธ๋ฆผ์ ๋์ผํ๋ค.
์ฌ๊ธฐ์ ํ๊ฐ์ง ์ถ๋ก ์ด ๊ฐ๋ฅํด์ง๋๋ฐ, ๋จ๊ณ๋ฅผ ๋๋ ์ ์งํํ๊ธฐ ๋๋ฌธ์ ํ์ฐ์ ์ผ๋ก ๋ ผ๋ฆฌ์ IO๊ฐ ๋ง์์ง ๊ฒ์ด๋ผ๋ ์ถ๋ก ์ด๋ค.
๋ค๋ง ํ๊ฐ์ง ์๋ฌธ์ด ๋๋ ๊ฒ์ ์ผ๋๋ค ๊ด๊ณ๋ฅผ ๊ฐ๋ ํ ์ด๋ธ์ ์ญ์ ๊ทํํ๊ฒ ๋๋ฉด ์ผ ์ชฝ์ ๋ฐ์ดํฐ๊ฐ ๋ค ์ชฝ์ ํ ์ด๋ธ์ ํจ๋ฉ๋๋ ํํ๋ก ํ ์ด๋ธ ๊ตฌ์ฑ์ด ์ด๋ฃจ์ด์ง๋๋ฐ ์ด๋ฌํ ์ํฉ์์๋ IO ํ์ ์ฆ๊ฐ์ ๋ํ ๋ถ๋ด๋ณด๋ค๋ IO๋ฅผ ํตํด ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ์ ์ฉ๋์ด ๋ ๋ถ๋ด์ด ๋์ง ์์๊น ํ๋ ๊ฒ์ด๋ค.
์ด๋ค์ ์ง์ ํ์ธํ๊ธฐ ์ํด, ์ค์ DB์ ๋๋ก ๋๋ ํ ์ด๋ธ์ ๋ํ ์กฐ์ธ ์ฟผ๋ฆฌ ์ฑ๋ฅ๊ณผ ์ด๋ฅผ ์ญ์ ๊ทํํ ์กฐํ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๋น๊ตํด๋ณด๊ณ ์ ํ๋ค.
ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ฑ
ํ ์คํธ ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ธฐ ์ํด ์๋ ๋ ํ ์ด๋ธ์ ์์ฑํด์ฃผ์๋ค. ๊ทธ ํ, ๊ฐ๊ฐ 5๋ง๊ฐ, 30๋ง๊ฐ์ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์ฑ์๋ฃ์ด์ฃผ์๋ค.
-- post ํ
์ด๋ธ
CREATE TABLE post (
id INT auto_increment,
user_id INT not null,
name VARCHAR(20) not null,
content VARCHAR(300) not null,
created_at TIMESTAMP not null,
PRIMARY KEY (id)
);
-- comment ํ
์ด๋ธ
CREATE TABLE comment (
id INT auto_increment,
post_id INT not null,
content VARCHAR(100) not null,
created_at TIMESTAMP not null,
PRIMARY KEY (id),
CONSTRAINT fk_comment_post FOREIGN KEY (post_id) REFERENCE post(id)
);
๊ทธ๋ฆฌ๊ณ ์ญ์ ๊ทํํ ๊ฒฝ์ฐ์ ์๋ฅผ ์ํด ๋ ํ ์ด๋ธ์ INNER ์กฐ์ธํ ๋ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ํ ์ด๋ธ์ ์ ์ฌํ๋ ์ฟผ๋ฆฌ๋ ์์ฑํด์ฃผ์๋ค.
CREATE TABLE post_comment (
id INT auto_increment NOT NULL,
PRIMARY KEY(id))
SELECT
p.id as post_id,
p.user_id as user_id,
p.name as post_name,
p.content as post_content,
p.created_at as post_created_at,
c.content as comment_content,
c.created_at as comment_created_at
FROM post p, comment c WHERE c.post_id = p.id;
ํ ์คํธ
๋ ํ ์ด๋ธ์ ์กฐ์ธํด์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐฉ์๊ณผ ํด๋น ํ ์ด๋ธ๋ค์ ๋ฏธ๋ฆฌ ์ญ์ ๊ทํ ํด๋ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐฉ์์ ์ฑ๋ฅ์ ๋น๊ตํ๊ธฐ ์ํด ์๋์ ์ผ์ด์ค๋ฅผ ํ ์คํธํด๋ณด๊ฒ ๋ค.
- ๋๋ผ์ด๋น - ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ๋ํ ์ธ๋ฑ์ค ์ค์บ VS ์ญ์ ๊ทํ ํ ์ด๋ธ์ ๋ํ ์ธ๋ฑ์ค ์ค์บ
- ๋๋ผ์ด๋น - ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ๋ํ (ํ ์ด๋ธ ํ์ค์บ - ์ธ๋ฑ์ค ์ค์บ) VS ์ญ์ ๊ทํ ํ ์ด๋ธ์ ๋ํ ํ ์ด๋ธ ํ์ค์บ
- ๋๋ผ์ด๋น - ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ๋ํ ํ ์ด๋ธ ํ์ค์บ VS ์ญ์ ๊ทํ ํ ์ด๋ธ์ ๋ํ ํ ์ด๋ธ ํ์ค์บ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์๋ ๋ฒ์ ํ์ ์กฐ๊ฑด์ ์ค์ด๊ฑฐ๋ ๋๋ ค์ ํ๊ฒ ๋ฐ์ดํฐ๊ฐ ๋ค์์ธ ๊ฒฝ์ฐ์ ์์์ธ ๊ฒฝ์ฐ๋ฅผ ๋๋ ์ ๋น๊ตํ๋ ค๊ณ ํ๋ค. ์ด ๋ ๋ค์์ ๊ธฐ์ค์ ์ ์ฒด ๋ฐ์ดํฐ์ ์ฝ 30%์ด๊ณ , ์์์ ๊ธฐ์ค์ ์ ์ฒด ๋ฐ์ดํฐ์ ์ฝ 5%๋ก ์์ ํ๊ฒ ๋ค.
๊ธฐ์ค์ด ๋๋ ์ง์ ์ ๋ฏธ๋ฆฌ ํ์ธํ๊ธฐ ์ํด ๊ฐ์ฅ ์ ์ ํด๋ณด์ด๋ ์นผ๋ผ์ผ๋ก post_created_at์ ์ ์ ํ๊ณ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก post_comment ํ ์ด๋ธ์์ ์์ 5%, 30% ์ง์ ์ ํ์ธํ๋ ๊ฐ๊ฐ 2023-12-24 14:14:34 ๊ณผ 2022-10-18 16:44:59 ์ผ๋ก ๋ํ๋ฌ๋ค. ํด๋น ๊ฐ๋ค์ ์ด์ ์๋ ์ฟผ๋ฆฌ์ ์ผ์์ ๋ฃ์ด๋ณด๋ฉด์ ์ฑ๋ฅ์ ๋น๊ตํ๋ ค ํ๋ค.
-- ์กฐ์ธ ์ฟผ๋ฆฌ
SELECT * FROM post p, comment c WHERE c.post_id = p.id AND WHERE p.created_at > '{์ผ์}';
-- ์ญ์ ๊ทํ ํ
์ด๋ธ ์ฟผ๋ฆฌ
SELECT * FROM post_comment WHERE post_created_at > '{์ผ์}';
1. ๋๋ผ์ด๋น - ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ๋ํ ์ธ๋ฑ์ค ์ค์บ VS ์ญ์ ๊ทํ ํ ์ด๋ธ์ ๋ํ ์ธ๋ฑ์ค ์ค์บ
ํ ์ด๋ธ ์กฐํ ์ ์กฐ๊ฑด์์ผ๋ก ํ์ฉ๋๋ ์นผ๋ผ์ ๋ชจ๋ ์ ์ ํ ์ธ๋ฑ์ค๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ์ด๋ค.
์ด๋ฅผ ์ํด post.created_at ์นผ๋ผ๊ณผ comment.post_id ์นผ๋ผ, ๊ทธ๋ฆฌ๊ณ post_comment.post_created_at ์นผ๋ผ์ ๊ฐ๊ฐ ์ธ๋ฑ์ค๋ฅผ ์์ฑํด์ฃผ์๋ค.
CREATE INDEX idx_created_at ON post(created_at);
CREATE INDEX idx_post_id ON comment(post_id);
CREATE INDEX idx_post_created_at ON post_comment(post_created_at);
๋ค์ ๋ฐ์ดํฐ
์์์ ์ธ๊ธํ ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ์ฒด ๋ฐ์ดํฐ์ 30%๋ง ๋ฝ์๋ด๋ ์์ ๊ฐ์ ํตํด ์คํํ ์คํ ๊ณํ์ ์๋์ ๊ฐ๋ค.
๊ฒฐ๊ณผ๋ฅผ ์์ฝํ์๋ฉด ์กฐ์ธ ์ฟผ๋ฆฌ์ ๋น์ฉ์ด ์ญ์ ๊ทํ ํ ์ด๋ธ ์ฟผ๋ฆฌ๋ณด๋ค 2๋ฐฐ ์ ๋ ๋๊ฒ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ณ ์๋ค.
์ด๋ฅผ ํด์ํด๋ณด๋ฉด, ์กฐ์ธ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ์ post๊ฐ ๋๋ผ์ด๋น ํ ์ด๋ธ๋ก ํ์ฉ๋๊ณ ์๊ณ , ์ด ๋ ์กฐ๊ฑด์์ ์ํด 5๋ง๊ฐ์ ํ ์ด๋ธ ๋ ์ฝ๋ ์ค 1.5๋ง๊ฐ์ ํ ์ด๋ธ ๋ ์ฝ๋๊ฐ ํ๊ฒ์ผ๋ก ์ฐ์ ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ์ดํ NL ์กฐ์ธ์ ์ํด 1.5๋ง๋ฒ์ ์ธ๋ฑ์ค ์ค์บ์ด ๋ฐ์ํ๊ณ , ํด๋น ์ง์ ์์ ๋๋ถ๋ถ์ ๋ถํ๊ฐ ๋ชฐ๋ ค์๋ค.
์ญ์ ๊ทํ ํ ์ด๋ธ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ์, ์กฐ๊ฑด์์ ๊ฐ์ง๊ณ ๊ณง๋ฐ๋ก ํ ์ด๋ธ ํ์ค์บ์ด ์๋ํ๋ค. ์ด ๋ํ ์๋นํ ๋ถํ๊ฐ ์๋ ์์ ์ด์ง๋ง, ์ธ๋ฑ์ค ์ค์บ์ด 1.5๋ง๋ฒ ๋ฐ์ํ ์ ์ฟผ๋ฆฌ๋ณด๋ค๋ ํจ์จ์ ์ธ ๋ฐฉ์์ด ๋์๋ค.
๋ํ ํ๊ฐ์ง ํน์ด์ ์ด๋ผ๋ฉด, ์กฐ๊ฑด์ ์ธ๋ฑ์ค ํ์ฉ์ด ๊ฐ๋ฅํ๋๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑํด๋์์ง๋ง ๊ฒฐ๊ณผ ์งํฉ์ ๋ฐ์ดํฐ๊ฐ ์๋ ๋ง๋ค๋ณด๋ ์ฑ๊ธ ๋ธ๋ก IO ๊ธฐ๋ฐ ๋๋ค ์์ธ์ค๋ณด๋ค๋ ๋ฉํฐ ๋ธ๋ก IO ๊ธฐ๋ฐ์ ์ํ์ ์์ธ์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์ตํฐ๋ง์ด์ ๊ฐ ํ๋จํ ๊ฒ์ด๋ค.
์์ ๋ฐ์ดํฐ
์์์ ์ธ๊ธํ ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ์ฒด ๋ฐ์ดํฐ์ 5%๋ง ๋ฝ์๋ด๋ ์์ ๊ฐ์ ํตํด ์คํํ ์คํ ๊ณํ์ ์๋์ ๊ฐ๋ค.
๊ฒฐ๊ณผ๋ฅผ ์์ฝํ์๋ฉด ์กฐ์ธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ฏธ์ธํ๊ฒ๋๋ง ๋ ๋น์ฉ์ด ์ ๊ฒ ๋์ค๊ณ ์๋ค.
์ด๋ฒ์๋ ๊ฒฐ๊ณผ ์งํฉ์ด ์ ์ ๊ท๋ชจ์ด๊ธฐ ๋๋ฌธ์ ์ตํฐ๋ง์ด์ ๊ฐ ์์ฑ๋์ด ์๋ ์ธ๋ฑ์ค๋ฅผ ๋ชจ๋ ํ์ฉํ๊ณ , NL ์กฐ์ธ์ ์ธ๋ฑ์ค ์ค์บ์ ๋จ 249๋ฒ๋ง ์ํํ์ฌ ์ฑ๋ฅ์ด ์ข๊ฒ๋์๋ค.
์ญ์ ๊ทํ ํ ์ด๋ธ ์กฐํ ์ฟผ๋ฆฌ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์ ์์ ์ผ๋ก ํ์ฉํ์ฌ ์ฑ๋ฅ์ด ์ ๋์์ง๋ง ๋ฏธ์ธํ๊ฒ๋๋ง ๋น์ฉ์ ๋ ๋์๋ฐ, ์ฌ์ค ์ฐจ์ด๊ฐ ํฌ์ง ์์์ ์ฌ์ค์ ์ฑ๋ฅ์ด ๋์ผํ๋ค๊ณ ๋ด๋ ๋ ๊ฒ ๊ฐ๋ค. ํ์ง๋ง ์กฐ์ธ์ ํญ์ ๋๋ฆฌ๋ค ๋ผ๋ ์์ ์ด ํ๋ฆด ๋๋ ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ์ฌ๋ก๋ผ๊ณ ๋ณผ ์ ์์ ๊ฒ ๊ฐ๋ค.
2. ๋๋ผ์ด๋น - ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ๋ํ (ํ ์ด๋ธ ํ์ค์บ - ์ธ๋ฑ์ค ์ค์บ) VS ์ญ์ ๊ทํ ํ ์ด๋ธ์ ๋ํ ํ ์ด๋ธ ํ์ค์บ
ํ ์ด๋ธ ์กฐํ ์ ์กฐ๊ฑด์์ ํฌํจ๋๋ ์นผ๋ผ๋ค์ ๋ํ ์ธ๋ฑ์ค๋ ์กด์ฌํ์ง ์๊ณ , ๋ค๋ง ์ํํ ์กฐ์ธ์ ์ํ ์กฐ์ธ ์นผ๋ผ์ ์ธ๋ฑ์ค๋ง ์กด์ฌํ๋ ์ํฉ์ด๋ค.
์ด๋ฅผ ์ํด ์๋์ฒ๋ผ ์ธ๋ฑ์ค๋ฅผ ์์ฑํด์ฃผ์๋ค.
CREATE INDEX idx_post_id ON comment(post_id);
๋ค์ ๋ฐ์ดํฐ
์์ ์ธ๊ธํ ๋ ์ฟผ๋ฆฌ์ ์คํ ๊ณํ์ ์๋์ ๊ฐ๋ค.
๊ฒฐ๊ณผ๋ฅผ ์์ฝํ์๋ฉด ์กฐ์ธ ์ฟผ๋ฆฌ๊ฐ ์ญ์ ๊ทํ ํ ์ด๋ธ ์กฐํ ์ฟผ๋ฆฌ๋ณด๋ค ์ฝ 30% ๋ ๋น์ผ ๊ฒ์ผ๋ก ๋ํ๋๋ค.
์ฌ์ค ํด๋น ๊ฒฐ๊ณผ๋ ์ด๋ฏธ ์์์ ์์ ํ ๊ฐ์ ์คํ ๊ณํ์ ๋ถ์ํ๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํ ์์ธํ ์ธ๊ธ์ ๊ฑด๋๋ฐ๊ฒ ๋ค.
์์ ๋ฐ์ดํฐ
์์์ ์ธ๊ธํ ๋ ์ฟผ๋ฆฌ์ ๋ํ ์คํ ๊ณํ์ ์๋์ ๊ฐ๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ฌ์ ํ ๋ค์ ๋ฐ์ดํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ์ ํ ์๋ ์ฟผ๋ฆฌ๊ฐ ๋น์ฉ์ด ๋ ๋ฎ๊ฒ ๋์ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์๋ ๋งน์ ์ด ์กด์ฌํ๋ค. ๋ฐ๋ก ์คํ ๊ณํ ์์์ ์ตํฐ๋ง์ด์ ๊ฐ ์์ธกํ rows ๊ฐ์ด๋ค. ๋ ์ฟผ๋ฆฌ ๋ชจ๋ 30๋ง๊ฑด์ ๋ฐ์ดํฐ ์ค 1500๊ฐ์ ๋ฐ์ดํฐ๋ง์ ๋ฝ์๋ด๋ ์ฟผ๋ฆฌ์์๋ ๋ถ๊ตฌํ๊ณ ์ตํฐ๋ง์ด์ ๋ ๋ด๋ถ์ ์ผ๋ก ํด๋น ์ฟผ๋ฆฌ๋ค์ด 10๋ง๊ฐ ์์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์๋ด๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ถ๋ ฅ ์ฟผ๋ฆฌ๋ก ์ธ์ํ ๊ฒ์ด๋ค.
์ฌ์ค ์กฐ๊ฑด์์ผ๋ก ์ฌ์ฉํ ์นผ๋ผ์ ์ธ๋ฑ์ค ์ ๋ฌด๋ก ์ธํด ๊ฐ์ ์คํ ๊ณํ์์๋ ์ฝ์คํธ๊ฐ ์์ดํ๊ฒ ๋์ค๋ ํ์์ด ํ ์คํธ ๋์ค ๋ฐ๊ฒฌ๋์ด์(์ ๊ธ์ 1 -> ๋ค์๋ฐ์ดํฐ, 2 -> ๋ค์๋ฐ์ดํฐ ์ฐธ๊ณ ) ์ ๊ทธ๋ฐ์ง ๊ณ์ ์๋ฌธ์ด์๋๋ฐ, ์ฌ๊ธฐ๊น์ง ์ค๊ณ ๋๋ ํน์ ์กฐ๊ฑด์ผ๋ก ํํฐ๋ง๋ ๋ฐ์ดํฐ์ ์์ ๋ํ ์์ธก์น๋ฅผ ์ฐ์ ํ ๋ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ๋ ์ ๋ฐํ ์์ธก์ ์ํํ๋ ๊ฒ์ผ๋ก ์๊ฐ๋๋ค. (์ด์ ๋ํ ํ์ธ์ ๋ค๋ฅธ ํฌ์คํ ์์ ์ํํ๊ฒ ์)
๋ฐ๋ผ์ ์ด๋ ์ตํฐ๋ง์ด์ ๊ฐ ์์ ํ ์๋ชป๋ ์ต์ ํ๋ฅผ ํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์ฌ์ง๊ณ , ์ด๋ ์ค์ ์คํ ์๊ฐ์ ๋ณด๋ฉด ํ์ฐํ ๋ํ๋๋ค.
- ์กฐ์ธ ์ฟผ๋ฆฌ: 72ms
- ์ญ์ ๊ทํ ์ฟผ๋ฆฌ: 179ms
๋ฐ๋ผ์ ํด๋น ๊ฒฝ์ฐ์ ์๋ ์กฐ์ธ ์ฟผ๋ฆฌ๊ฐ ์ฑ๋ฅ์ด ๋ ์ข๋ค๊ณ ํด์ํ๋๊ฒ ๋ง๋ค๊ณ ๋ณด์ธ๋ค. ๋ํ ์ด๋ฌํ ๊ด์ ์์ ๋ดค์ ๋, ๊ฐ์ ํ ์คํธ ํ๊ฒฝ์์ ๋ค์ ๋ฐ์ดํฐ ์ํฉ์ผ ๋๋ ๋์ ์ฑ๋ฅ์ ์กฐ์ธ ์ฟผ๋ฆฌ๊ฐ ๋ ๋์๋ค๊ธฐ๋ณด๋ค๋ ๊ฑฐ์ ์ฐจ์ด๊ฐ ์๋ค๊ณ ํด์ํ๋๊ฒ ๋ง๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. (์ค์ ์คํ ์๊ฐ ๋จ 2ms ์ฐจ์ด)
3. ๋๋ผ์ด๋น - ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ๋ํ ํ ์ด๋ธ ํ์ค์บ VS ์ญ์ ๊ทํ ํ ์ด๋ธ์ ๋ํ ํ ์ด๋ธ ํ์ค์บ
๋ง์ฝ ํด๋น ๊ฒฝ์ฐ์ ์์ฒ๋ผ ์กฐ์ธ ์นผ๋ผ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ์ง ์๋ ์ํฉ์ ์ฌ์ค OLTP ํ๊ฒฝ์์๋ ๊ถ์ฅํ ์ ์๋ ์ํฉ์ด์ง๋ง, ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ต์ ์ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํ๊ธฐ ์ํด ํ ์คํธ๋ฅผ ์งํํ๊ฒ ๋ค.
์ด๋ฅผ ์ํด ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ์ญ์ ํด์ฃผ์๋ค.
๋ค์ ๋ฐ์ดํฐ
์คํ ๊ณํ์ ์๋์ ๊ฐ๋ค.
์ ์คํ ๊ณํ์์ ์์ Table scan on c.... ๋ถ๋ถ๊ณผ ์๋์ Table scan on post_comment.... ๋ถ๋ถ์ ๋น๊ตํ๋ฉด ์ญ์ ๊ทํ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ํจ๋ฉ์ด ์ค์ ์คํ ๊ณํ์ ์ด๋ป๊ฒ ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธ์ด ๊ฐ๋ฅํด ๋ณด์ธ๋ค. ์ด๋ค๋ง ๋ฐ๋ก ๋ผ๋ด ์กฐ๊ธ ๋ ํ์ธํด๋ณด๊ฒ ๋ค.
ํด๋น ์คํ ๊ณํ์ ๋ดค์ ๋ ๋ ํ ์ด๋ธ์ ์์ rows๋ ๊ฑฐ์ ๋น์ทํ์ง๋ง cost๋ ๋ฐ์ดํฐ ํจ๋ฉ์ด ๋ฐ์ํ์ง ์์ comment ์ชฝ์ด ๋ ๋ฎ์ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด ๊ฒฐ๊ณผ๋ง ๋๊ณ ๋ดค์ ๋ ๋ฐ์ดํฐ ํจ๋ฉ์ด cost ์ฐ์ ์ ์ํฅ์ ๋ฏธ์น๊ณ , ์ด ๊ฒ์ด ์ฑ๋ฅ ์ ์ํฅ์ ๋ฏธ์น ์ ์์์ ์๋ฏธํ๋ ๊ฒ์ผ๋ก ๋ณด์ด์ง๋ง ๊ทธ๋ ๊ฒ ํฐ ์ํฅ์ ์ฃผ์ง๋ ์๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
๋ค์ ์ ์คํ ๊ณํ์ผ๋ก ๋์๊ฐ์, ์ด๋ฒ์ ์กฐ์ธ ์ฟผ๋ฆฌ ์ชฝ์ ์คํ ๊ณํ์ด ์ด์ ๊ณผ๋ ๋ฌ๋ผ์ง ๊ฒ์ ์ ์ ์๋ค. ์ด์ ์๋ post ํ ์ด๋ธ์ ๋๋ผ์ด๋น ํ ์ด๋ธ๋ก ๋๋๋ฐ, ์ด๋ฒ์๋ comment ํ ์ด๋ธ์ ๋๋ผ์ด๋น ํ ์ด๋ธ๋ก ๋๋ค. ์ด๋ ๊ฒ ๋ฐ๋ ์ด์ ๋ฅผ ์ ์ถํด๋ณด์๋ฉด, ์๋ฌด๋๋ ์กฐ์ธ ์ ์ด๋ป๊ฒ๋ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ๋ คํ๊ธฐ ๋๋ฌธ์ผ๋ก ๋ณด์ธ๋ค. ๋ง์ฝ post๊ฐ ๊ทธ๋๋ก ๋๋ผ์ด๋น ํ ์ด๋ธ์ธ์ฑ๋ก NL ์กฐ์ธ์ ์คํํ๋ค๋ฉด, post ํ ์ด๋ธ์์ ํ ์ด๋ธ ํ์ค์บ์ ํตํด ์ฐพ์๋ธ ๋ ์ฝ๋ ํ๊ฑด ํ๊ฑด์ ๋ํด ๊ฐ๊ฐ ํ ์ด๋ธ ํ์ค์บ์ด ๋ฐ์ํ์ ๊ฒ์ด๋ค. ์กฐ๊ฑด์์ผ๋ก post ํ ์ด๋ธ์์ ์ ๋ฐ์ ๋ ํํฐ๋ง ๋๋ ๊ฒ์ผ๋ก ํ์ธํ์ผ๋ ํ ์ด๋ธ ํ์ค์บ์ด 2.5๋ง๊ฑด ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ค์ ๋ก ์กฐ์ธ ์์๋ฅผ ๊ณ ์ ํ์ ๋ ์ด๋ป๊ฒ ์คํ ๊ณํ์ด ๋ฐ์ํ๋์ง ํ์ธํ๊ธฐ ์ํด ํํธ๋ฅผ ์ฃผ๊ณ ์คํ ๊ณํ์ ํ์ธํ๋ค.
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ์ตํฐ๋ง์ด์ ๋ post๋ฅผ ๋๋ผ์ด๋น ํ ์ด๋ธ๋ก ๋ ์ ๋๋ฌด ํฐ ๋นํจ์จ์ด ๋ฐ์ํ๋ ๊ฒ์ ์ฐ๋ คํ์ฌ Hash ์กฐ์ธ์ ์ ํํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ค๋ง ์ด์ฐ๋์๋ ํด๋น ๊ฒฝ์ฐ๋ ํ๋์ ํ ์ด๋ธ์ ์กฐํํ๋ ๊ฒ๋ณด๋ค ๋์ ์ฑ๋ฅ์ ๋ณด์ธ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์์ ๋ฐ์ดํฐ
์คํ ๊ณํ์ ์๋์ ๊ฐ๋ค.
์ด ๊ฒฝ์ฐ์ created_at ์นผ๋ผ ๊ธฐ๋ฐ์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชฉํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ ํ ์ด๋ธ ํ์ค์บ์ ๋ฐฉ๋ฒ ๋ฐ์ ์๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ์ ์์ด ์ ์ด์ง๋คํด๋ ์คํ ๊ณํ ์ ๋น์ฉ์ด๋ ์ค์ ์คํ ์๊ฐ์ ํฐ ์ฐจ์ด๊ฐ ์กด์ฌํ์ง ์๋๋ค.
์ด ๊ฒฝ์ฐ ๋ง์ฝ ์กฐ์ธ ์ฟผ๋ฆฌ๊ฐ Hash ์กฐ์ธ์ผ๋ก ์คํ๋๋ค๋ฉด ์ด๋ค ์ฑ๋ฅ์ ๋ฐํํ ๊น?
์ด ๊ฒฝ์ฐ์ ๋๋ ค ์ ์ฒด ๊ฒฐ๊ณผ ์งํฉ์ ์ถ๋ ฅํ๋๋ฐ์๋ ์ญ์ ๊ทํ ํ ์ด๋ธ์ ํ์ค์บํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฅด๋ค. ๋ค๋ง Hash ์กฐ์ธ์ ์กฐ์ธ ์ ์ฌ์ ์์ ์ด ์กด์ฌํ์ฌ ์ฒซ๋ฒ์งธ ๋ ์ฝ๋๋ฅผ ๋ฐํํ ๋๊น์ง ์๋นํ ์ค๋๊ฑธ๋ฆฌ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ ๋ถ๋ถ๋ฒ์ ์ฒ๋ฆฌ๋ฅผ ํตํ ์ฑ๋ฅ ๊ฐ์ ์ด ์ค์ํ OLTP ํ๊ฒฝ์์๋ ์ ํธ๋์ง ์๋ ๋ฐฉ์์ด๋ค.
๊ฒฐ๋ก
ํ ์คํธ๋ฅผ ํตํด์ ๋์ถํ ์ ์๋ ๊ฒฐ๋ก ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฒซ์งธ, ์ ์ต์ ํ๋ ์กฐ์ธ ์ฟผ๋ฆฌ๋ ์ฑ๋ฅ์ด ๋น์ทํ๊ฑฐ๋ ์คํ๋ ค ๊ทผ์ํ๊ฒ ๋ ๋น ๋ฅผ ์ ์๋ค. ์ด ๊ฒฝ์ฐ๊ฐ ํ ์คํธ ์ ์์ ํ๋ ๋์คํฌ์์ ์ฝ์ด์ค๋ ์ด ๋ฐ์ดํฐ ์์ด ์กฐ์ธ ์ฟผ๋ฆฌ ์ชฝ์ด ๋ ์ ์ ๊ฒ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ์๋ผ๊ณ ์๊ฐ๋๋ค.(๋ฌผ๋ก ์ํฅ์ ๊ทธ๋ ๊ฒ ํฌ์ง๋ ์์ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค) ๋ฌผ๋ก ์ด ๊ฒฝ์ฐ์, ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ์ ์์ด ์ ์ฒด ํ ์ด๋ธ ํฌ๊ธฐ์ ๋นํด ์์์ผํ๋ค.
- ๋์งธ, ์กฐ์ธ ์ ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ์กฐ์ธ ์นผ๋ผ์ผ๋ก ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ, ์๋นํ ๋นํจ์จ์ด ๋ฐ์ํ๋ค. ํด๋น ๊ฒฝ์ฐ์ ์ตํฐ๋ง์ด์ ๊ฐ Hash ์กฐ์ธ์ ์ ํํ ๊ฐ๋ฅ์ฑ๋ ์๋๋ฐ ์ด ๋ํ ์ ์ฒด ๋ฐ์ดํฐ ์งํฉ์ ๋ฐํํ๋๋ฐ์ ๋ ์ข์ ์ฑ๋ฅ์ ๋ณด์ผ์ง ๋ชฐ๋ผ๋ ๋ถ๋ถ ๋ฒ์ ์ฒ๋ฆฌ๋ฅผ ํตํ ์ฑ๋ฅ ๊ฐ์ ์ด ์ค์ํ OLTP ํ๊ฒฝ์์๋ ์ ํธ๋์ง ์๋ ๋ฐฉ์์ผ๋ก ๋ณผ ์ ์๋ค.
- (์ถ๊ฐ) ์ ์งธ, ์ตํฐ๋ง์ด์ ๋ ํ ์ด๋ธ ํต๊ณ๊ฐ์ ๊ด๋ฆฌํ๊ณ ์ด๋ฅผ ์ด์ฉํ์ฌ ๊ณ์ฐํ ๋น์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์คํ ๊ณํ์ ์ธ์ด๋ค. ์ด ๋ ํน์ ์นผ๋ผ์ ์ธ๋ฑ์ค ์ ๋ฌด์ ๋ฐ๋ผ ํต๊ณ๊ฐ์ ์ ํ๋๊ฐ ํ๋ ค์ง ์ ์๊ณ ์ด์ ๋ฐ๋ผ ์ค์ ๋ก๋ ๋ ๋นํจ์จ์ ์ธ ์คํ ๊ณํ์ ์ ํํ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค.
์ฆ, ์ ๊ทํ๋ก ์ธํ ์กฐ์ธ ์ฟผ๋ฆฌ์ ์๋๊ฐ ํญ์ ๋ ๋๋ฆฌ๋ค๊ณ ๋ ํ ์ ์์ด ๋ณด์ธ๋ค. ๋ค๋ง ์ฑ๋ฅ์ ์ข๊ฒํ๋ ค๋ฉด ๋๋ฆฌ๋ธ ํ ์ด๋ธ์ ์กฐ์ธ ์นผ๋ผ ์ธ๋ฑ์ค๊ฐ ๊ฑฐ์ ํ์์ ์ผ๋ก ํ์ํ๊ณ , ์ด ๊ฒฝ์ฐ DML ์ฑ๋ฅ ์ ํ๋ ์ถ๊ฐ์ ์ธ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ๋ฏ๋ก ์ ๊ทํ ์ ์ถ๊ฐ์ ์ธ ๋น์ฉ์ด ๋๋ ๊ฒ์ ๋ง๋ ๋ง์ผ ๊ฒ์ด๋ค.
'Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ ์ฝ๋ ๋๋ค ์กฐํ๋ฅผ ํตํ ๋๊ด์ ๋ฝ ์ฑ๋ฅ ๊ฐ์ ๊ธฐ (with ์ฌ์ด๋ ํ๋ก์ ํธ) (1) | 2024.05.02 |
---|---|
Database PK ์์ฑ ์ ๋ต (without DB, Mysql) (3) | 2024.03.17 |
ํ์ด์ง๋ค์ด์ ๋ฐฉ๋ฒ๋ก ๋น๊ต(Offset vs Cursor) (0) | 2024.02.17 |
Slow Query ํ์ธ๋ฒ (in Mysql, Postgresql) (0) | 2023.12.13 |