๐Ÿš€ [SQL] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๋ฐ ์„ฑ๋Šฅ ๋ถ„์„ ๋Œ€์ž‘์ „! ๐Ÿš€

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿš€ [SQL] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๋ฐ ์„ฑ๋Šฅ ๋ถ„์„ ๋Œ€์ž‘์ „! ๐Ÿš€

 

 

์•ˆ๋…•ํ•˜์„ธ์š”, SQL ๋งˆ์Šคํ„ฐ๊ฐ€ ๋˜๊ณ  ์‹ถ์€ ์—ฌ๋Ÿฌ๋ถ„! ์˜ค๋Š˜์€ ์ •๋ง ํฅ๋ฏธ์ง„์ง„ํ•œ ์ฃผ์ œ๋กœ ์—ฌ๋Ÿฌ๋ถ„๊ณผ ํ•จ๊ป˜ํ•  ๊ฑฐ์˜ˆ์š”. ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์ตœ์ ํ™”์™€ ์„ฑ๋Šฅ ๋ถ„์„์— ๋Œ€ํ•ด ๊นŠ์ด ํŒŒํ—ค์ณ๋ณผ ๊ฑฐ๋ž๋‹ˆ๋‹ค. ๐Ÿ˜Ž

์—ฌ๋Ÿฌ๋ถ„, ํ˜น์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋Š๋ ค์„œ ๋‹ต๋‹ตํ–ˆ๋˜ ์  ์žˆ๋‚˜์š”? ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ค์„œ "์•„ ๋ชฐ๋ผ~ ํฌ๊ธฐํ• ๋ž˜~" ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ์ˆœ๊ฐ„๋“ค... ๋‹ค๋“ค ํ•œ ๋ฒˆ์ฏค์€ ๊ฒช์–ด๋ณด์…จ์ฃ ? ใ…‹ใ…‹ใ…‹

๊ทธ๋Ÿฐ๋ฐ ๋ง์ด์ฃ , ์—ฌ๋Ÿฌ๋ถ„! ์ด์ œ ๊ทธ๋Ÿฐ ๊ณ ๋ฏผ์€ ๋! ์˜ค๋Š˜ ์ด ๊ธ€์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๋ถ„์€ ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ๋‹ฌ์ธ์ด ๋  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ SQL ๊ณ ์ˆ˜์˜ ์žฌ๋Šฅ์„ ๊ตฌ๋งคํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ๐Ÿ˜‰

๐Ÿ’ก ์ž ๊น! ์•Œ๊ณ  ๊ณ„์…จ๋‚˜์š”?

์žฌ๋Šฅ๋„ท(https://www.jaenung.net)์€ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ๊ฑฐ๋ž˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์ด์—์š”. SQL ์ตœ์ ํ™” ๋Šฅ๋ ฅ๋„ ํ•˜๋‚˜์˜ ์žฌ๋Šฅ์ด ๋  ์ˆ˜ ์žˆ๊ฒ ์ฃ ? ์—ฌ๋Ÿฌ๋ถ„์˜ SQL ์‹ค๋ ฅ์ด ํ–ฅ์ƒ๋œ๋‹ค๋ฉด, ๋‚˜์ค‘์— ์žฌ๋Šฅ๋„ท์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์„ ์ค„ ์ˆ˜๋„ ์žˆ์„ ๊ฑฐ์˜ˆ์š”!

์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”? ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ„ฐ๋ณด ์—”์ง„์„ ๋‹ฌ์•„์ค„ ์‹œ๊ฐ„์ด์—์š”! ๐ŸŽ๏ธ๐Ÿ’จ

1. SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”, ์™œ ์ค‘์š”ํ• ๊นŒ์š”? ๐Ÿค”

์—ฌ๋Ÿฌ๋ถ„, SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”๊ฐ€ ์™œ ์ค‘์š”ํ•œ์ง€ ์•„์‹œ๋‚˜์š”? ๊ทธ๋ƒฅ ์ฟผ๋ฆฌ ๋Œ๋ฆฌ๋ฉด ๋˜๋Š” ๊ฑฐ ์•„๋‹ˆ์•ผ? ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋Š” ๋ถ„๋“ค! ์ž ๊น๋งŒ์š”! ๐Ÿ–๏ธ

SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์˜ ํ•ต์‹ฌ์ด์—์š”. ์ตœ์ ํ™”๋œ ์ฟผ๋ฆฌ๋Š”:

  • โšก ์‹คํ–‰ ์†๋„๊ฐ€ ๋นจ๋ผ์ ธ์š”
  • ๐Ÿ’ฐ ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์—ฌ์ค˜์š”
  • ๐Ÿ˜Š ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ์‹œ์ผœ์ค˜์š”
  • ๐Ÿš€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œ์ผœ์ค˜์š”

์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ์—ฌ๋Ÿฌ๋ถ„์ด ์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ์„ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณผ๊นŒ์š”? ๋ธ”๋ž™ํ”„๋ผ์ด๋ฐ์ด ์„ธ์ผ ์ค‘์— ๊ฐ‘์ž๊ธฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ฒ„๋ฒ…๊ฑฐ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด...? ๐Ÿ˜ฑ ์•„์ฐ”ํ•˜์ฃ ?

โš ๏ธ ์ฃผ์˜! ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ์ฟผ๋ฆฌ์˜ ์œ„ํ—˜์„ฑ

์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ์ฟผ๋ฆฌ๋Š” ๋งˆ์น˜ ๊ณผ์† ์šด์ „์„ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. ์ฒ˜์Œ์—” ๋น ๋ฅธ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๊ฒฐ๊ตญ ์‚ฌ๊ณ (์‹œ์Šคํ…œ ๋‹ค์šด)๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์ฃ !

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ F1 ๋ ˆ์ด์‹ฑ์นด์˜ ์—”์ง„์„ ํŠœ๋‹ํ•˜๋“ฏ์ด, ์šฐ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„๋„ ํŠœ๋‹ํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”! ๐ŸŽ๏ธ

SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ์ค‘์š”์„ฑ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™” ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋ฆฌ์†Œ์Šค ์ ˆ์•ฝ ์‚ฌ์šฉ์ž ๋งŒ์กฑ

์ž, ์ด์ œ ์šฐ๋ฆฌ๋Š” SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ์ค‘์š”์„ฑ์„ ์•Œ์•˜์–ด์š”. ๊ทธ๋Ÿผ ์ด์ œ ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ๋‹ค์Œ ์„น์…˜์—์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•ด์š”! ๐Ÿ•ต๏ธโ€โ™€๏ธ

2. SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ๊ธฐ๋ณธ ์›์น™ ๐Ÿ“š

์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ์„ธ๊ณ„๋กœ ๋“ค์–ด๊ฐ€๋ณผ๊นŒ์š”? ์—ฌ๋Ÿฌ๋ถ„, ์ค€๋น„๋˜์…จ๋‚˜์š”? ๐Ÿ˜Ž

SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ์›์น™๋“ค์ด ์žˆ์–ด์š”. ์ด ์›์น™๋“ค์„ ์ž˜ ๋”ฐ๋ฅด๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฟผ๋ฆฌ๋Š” ๋งˆ์น˜ ์šฐ์‚ฌ์ธ ๋ณผํŠธ์ฒ˜๋Ÿผ ๋นจ๋ผ์งˆ ๊ฑฐ์˜ˆ์š”! ๐Ÿƒโ€โ™‚๏ธ๐Ÿ’จ

2.1. ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ๐ŸŽฏ

์ฒซ ๋ฒˆ์งธ ์›์น™์€ ์ •๋ง ๊ฐ„๋‹จํ•ด์š”. ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๋Š” ๊ฑฐ์˜ˆ์š”! ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฑด ๋งˆ์น˜ ํŽธ์˜์ ์—์„œ ๊ณผ์ž ํ•˜๋‚˜ ์‚ฌ๋ ค๊ณ  ์นดํŠธ๋ฅผ ๋Œ๊ณ  ๊ฐ€๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. ใ…‹ใ…‹ใ…‹

๐Ÿ’ก Tip: SELECT * ์‚ฌ์šฉ์„ ํ”ผํ•˜์„ธ์š”!

SELECT * ๋Š” ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ, ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„์š”.

์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?


-- ์ข‹์ง€ ์•Š์€ ์˜ˆ
SELECT * FROM users;

-- ์ข‹์€ ์˜ˆ
SELECT id, name, email FROM users;

๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๊ฐ€ ํ›จ์”ฌ ํšจ์œจ์ ์ด๊ฒ ์ฃ ? ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๊ฐ€์ ธ์˜ค๋‹ˆ๊นŒ์š”! ๐Ÿ‘

2.2. ์ธ๋ฑ์Šค ํ™œ์šฉํ•˜๊ธฐ ๐Ÿ“‡

๋‘ ๋ฒˆ์งธ ์›์น™์€ ์ธ๋ฑ์Šค๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. ์ธ๋ฑ์Šค๋Š” ๋งˆ์น˜ ์ฑ…์˜ ๋ชฉ์ฐจ์™€ ๊ฐ™์•„์š”. ๋ชฉ์ฐจ๊ฐ€ ์žˆ์œผ๋ฉด ์›ํ•˜๋Š” ๋‚ด์šฉ์„ ๋นจ๋ฆฌ ์ฐพ์„ ์ˆ˜ ์žˆ์ฃ ?

์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ์˜ˆ์š”. ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์–ด์š”!

โš ๏ธ ์ฃผ์˜: ์ธ๋ฑ์Šค๋Š” ์–‘๋‚ ์˜ ๊ฒ€์ด์—์š”!

์ธ๋ฑ์Šค๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๋งŒ๋“ค๋ฉด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”. ๊ผญ ํ•„์š”ํ•œ ๊ณณ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์š”.

์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ๋ฅผ ๋ณผ๊นŒ์š”?


-- ์ธ๋ฑ์Šค ์ƒ์„ฑ
CREATE INDEX idx_user_email ON users(email);

-- ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•œ ์ฟผ๋ฆฌ
SELECT * FROM users WHERE email = 'example@email.com';

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด๋ฉ”์ผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ๋•Œ ํ›จ์”ฌ ๋นจ๋ผ์งˆ ๊ฑฐ์˜ˆ์š”! ๐Ÿš€

2.3. ์กฐ์ธ ์ตœ์ ํ™”ํ•˜๊ธฐ ๐Ÿค

์„ธ ๋ฒˆ์งธ ์›์น™์€ ์กฐ์ธ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. ์กฐ์ธ์€ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ฉ์น˜๋Š” ์ž‘์—…์ธ๋ฐ, ์ด๊ฒŒ ์ œ๋Œ€๋กœ ์•ˆ ๋˜๋ฉด ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์ด ํ™• ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”.

์กฐ์ธ์„ ํ•  ๋•Œ๋Š” ์ž‘์€ ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์กฐ์ธํ•˜๋Š” ๊ฒŒ ์ข‹์•„์š”. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋Šฅํ•˜๋ฉด INNER JOIN์„ ์‚ฌ์šฉํ•˜์„ธ์š”. OUTER JOIN๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์ข‹๊ฑฐ๋“ ์š”!

์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?


-- ์ข‹์€ ์˜ˆ
SELECT u.name, o.order_date
FROM users u
INNER JOIN orders o ON u.id = o.user_id
WHERE u.country = 'Korea';

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•œ๊ตญ ์‚ฌ์šฉ์ž์˜ ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด์š”.

2.4. ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ ์ค„์ด๊ธฐ ๐ŸŽญ

๋„ค ๋ฒˆ์งธ ์›์น™์€ ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๋Š” ๊ฑฐ์˜ˆ์š”. ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” ์ฟผ๋ฆฌ ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ๋„ฃ๋Š” ๊ฑฐ์˜ˆ์š”. ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”.

๊ฐ€๋Šฅํ•˜๋ฉด ์„œ๋ธŒ์ฟผ๋ฆฌ ๋Œ€์‹  ์กฐ์ธ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์กฐ์ธ์ด ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋” ๋น ๋ฅด๊ฑฐ๋“ ์š”!


-- ์ข‹์ง€ ์•Š์€ ์˜ˆ (์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ)
SELECT name
FROM users
WHERE id IN (SELECT user_id FROM orders WHERE total > 1000);

-- ์ข‹์€ ์˜ˆ (์กฐ์ธ ์‚ฌ์šฉ)
SELECT DISTINCT u.name
FROM users u
INNER JOIN orders o ON u.id = o.user_id
WHERE o.total > 1000;

๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๊ฐ€ ๋” ํšจ์œจ์ ์ด์—์š”. ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”!

2.5. LIKE ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ์ฃผ์˜ํ•˜๊ธฐ ๐Ÿ”

๋งˆ์ง€๋ง‰ ์›์น™์€ LIKE ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ์„ ์ฃผ์˜ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. LIKE๋Š” ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์œ ์šฉํ•˜์ง€๋งŒ, ์™€์ผ๋“œ์นด๋“œ(%)๋ฅผ ์•ž์— ์‚ฌ์šฉํ•˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ ธ์š”.

๐Ÿค“ ์•Œ์•„๋‘์„ธ์š”!

LIKE 'abc%'๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, LIKE '%abc'๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์š”.

์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?


-- ์ข‹์ง€ ์•Š์€ ์˜ˆ
SELECT * FROM users WHERE name LIKE '%John%';

-- ์ข‹์€ ์˜ˆ
SELECT * FROM users WHERE name LIKE 'John%';

๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๊ฐ€ ๋” ํšจ์œจ์ ์ด์—์š”. 'John'์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„์„ ์ฐพ์„ ๋•Œ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”!

SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ๊ธฐ๋ณธ ์›์น™ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ๊ธฐ๋ณธ ์›์น™ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ์ธ๋ฑ์Šค ํ™œ์šฉํ•˜๊ธฐ ์กฐ์ธ ์ตœ์ ํ™”ํ•˜๊ธฐ ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ ์ค„์ด๊ธฐ LIKE ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ์ฃผ์˜

์ž, ์ด๋ ‡๊ฒŒ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ๊ธฐ๋ณธ ์›์น™๋“ค์„ ์‚ดํŽด๋ดค์–ด์š”. ์ด ์›์น™๋“ค์„ ์ž˜ ๊ธฐ์–ตํ•˜๊ณ  ์ ์šฉํ•˜๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฟผ๋ฆฌ๋Š” ํ›จ์”ฌ ๋” ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•  ๊ฑฐ์˜ˆ์š”! ๐Ÿš€

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ด๋Ÿฐ ์›์น™๋“ค์„ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๋ถ„์„ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ์ค€๋น„๋˜์…จ๋‚˜์š”? Let's go! ๐Ÿ’ช

3. ์‹ค์ „! SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™” ํ…Œํฌ๋‹‰ ๐Ÿ› ๏ธ

์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹ค์ „ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™” ํ…Œํฌ๋‹‰์„ ์•Œ์•„๋ณผ ์‹œ๊ฐ„์ด์—์š”! ์—ฌ๋Ÿฌ๋ถ„, ์ค€๋น„๋˜์…จ๋‚˜์š”? ๐Ÿค“

์ด ์„น์…˜์—์„œ๋Š” ์‹ค์ œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™” ํ…Œํฌ๋‹‰์„ ๋ฐฐ์›Œ๋ณผ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ SQL ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค๋ฅผ ๋“ฃ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ๐Ÿ˜‰

3.1. WHERE ์ ˆ ์ตœ์ ํ™”ํ•˜๊ธฐ ๐Ÿ”

WHERE ์ ˆ์€ ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ์ขŒ์šฐํ•˜๋Š” ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด์—์š”. ์—ฌ๊ธฐ์„œ ๋ช‡ ๊ฐ€์ง€ ํŒ์„ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”!

  • ๐ŸŽฏ ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์„ ํ™œ์šฉํ•˜์„ธ์š”: WHERE ์ ˆ์—์„œ ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ฆฐ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋นจ๋ผ์ ธ์š”.
  • ๐Ÿšซ ํ•จ์ˆ˜ ์‚ฌ์šฉ์„ ํ”ผํ•˜์„ธ์š”: WHERE ์ ˆ์—์„œ ์ปฌ๋Ÿผ์— ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์—†์–ด์š”.
  • ๐Ÿ”ข ๋ฒ”์œ„ ์กฐ๊ฑด์€ ๋งˆ์ง€๋ง‰์— ์‚ฌ์šฉํ•˜์„ธ์š”: ๋“ฑํ˜ธ(=) ์กฐ๊ฑด์„ ๋จผ์ € ์‚ฌ์šฉํ•˜๊ณ , ๋ฒ”์œ„ ์กฐ๊ฑด(>, <)์„ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•˜์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?


-- ์ข‹์ง€ ์•Š์€ ์˜ˆ
SELECT * FROM orders 
WHERE YEAR(order_date) = 2023 AND status = 'completed';

-- ์ข‹์€ ์˜ˆ
SELECT * FROM orders 
WHERE status = 'completed' AND order_date >= '2023-01-01' AND order_date < '2024-01-01';

๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๊ฐ€ ํ›จ์”ฌ ํšจ์œจ์ ์ด์—์š”. ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ–ˆ๊ฑฐ๋“ ์š”!

3.2. GROUP BY์™€ ORDER BY ์ตœ์ ํ™”ํ•˜๊ธฐ ๐Ÿ“Š

GROUP BY์™€ ORDER BY๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๊ณ  ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿ’ก Tip: GROUP BY์™€ ORDER BY์—๋Š” ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ฆฐ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜์„ธ์š”!

์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ฆฐ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •๋ ฌ ๊ณผ์ •์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์–ด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋ผ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?


-- ์ธ๋ฑ์Šค ์ƒ์„ฑ
CREATE INDEX idx_user_id_order_date ON orders(user_id, order_date);

-- ์ตœ์ ํ™”๋œ ์ฟผ๋ฆฌ
SELECT user_id, SUM(total) as total_sales
FROM orders
WHERE order_date >= '2023-01-01'
GROUP BY user_id
ORDER BY user_id;

์ด ์ฟผ๋ฆฌ๋Š” ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•ด ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์–ด์š”.

3.3. EXPLAIN ๋ช…๋ น์–ด ํ™œ์šฉํ•˜๊ธฐ ๐Ÿ•ต๏ธโ€โ™€๏ธ

EXPLAIN ๋ช…๋ น์–ด๋Š” ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์˜ˆ์š”. ์ด๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€, ์–ด๋–ค ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋“ฑ์„ ์•Œ ์ˆ˜ ์žˆ์ฃ .

EXPLAIN์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ์˜ ๋ณ‘๋ชฉ ์ง€์ ์„ ์ฐพ์•„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์–ด์š”!

์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ด์š”. ์ฟผ๋ฆฌ ์•ž์— EXPLAIN๋งŒ ๋ถ™์ด๋ฉด ๋ผ์š”!


EXPLAIN SELECT * FROM users WHERE email = 'example@email.com';

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•ด๋‹น ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”. ์ธ๋ฑ์Šค๋ฅผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€, ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ”์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ฃ .

3.4. ์ž„์‹œ ํ…Œ์ด๋ธ” ํ™œ์šฉํ•˜๊ธฐ ๐Ÿ“ฆ

๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์—์š”. ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์กฐ์ธ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์œ ์šฉํ•ด์š”.

์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ „์ฒด์ ์ธ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์ฃ .

์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?


-- ์ž„์‹œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
CREATE TEMPORARY TABLE temp_high_value_customers AS
SELECT user_id, SUM(total) as total_spent
FROM orders
GROUP BY user_id
HAVING SUM(total) > 10000;

-- ์ž„์‹œ ํ…Œ์ด๋ธ” ํ™œ์šฉ
SELECT u.name, t.total_spent
FROM users u
JOIN temp_high_value_customers t ON u.id = t.user_id;

-- ์ž„์‹œ ํ…Œ์ด๋ธ” ์‚ญ์ œ
DROP TEMPORARY TABLE IF EXISTS temp_high_value_customers;

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณต์žกํ•œ ์—ฐ์‚ฐ์„ ๋ฏธ๋ฆฌ ์ฒ˜๋ฆฌํ•ด๋‘๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์„ฑ๋Šฅ๋„ ์ข‹์•„์ง€๊ณ , ์ฝ”๋“œ๋„ ๊น”๋”ํ•ด์ง€์ฃ !

3.5. ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ตœ์ ํ™”ํ•˜๊ธฐ ๐Ÿ“„

๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ํŽ˜์ด์ง€๋„ค์ด์…˜์€ ํ•„์ˆ˜์ฃ . ํ•˜์ง€๋งŒ ์ž˜๋ชป ๊ตฌํ˜„ํ•˜๋ฉด ์„ฑ๋Šฅ์— ์‹ฌ๊ฐํ•œ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์–ด์š”.

OFFSET์„ ์‚ฌ์šฉํ•œ ํŽ˜์ด์ง€๋„ค์ด์…˜์€ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์„ฑ๋Šฅ์ด ๋–จ์–ด์ ธ์š”. ๋Œ€์‹  'keyset ํŽ˜์ด์ง€๋„ค์ด์…˜'์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„์š”.

์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?


-- ์ข‹์ง€ ์•Š์€ ์˜ˆ (OFFSET ์‚ฌ์šฉ)
SELECT * FROM products
ORDER BY id
LIMIT 20 OFFSET 10000;

-- ์ข‹์€ ์˜ˆ (keyset ํŽ˜์ด์ง€๋„ค์ด์…˜)
SELECT * FROM products
WHERE id > 10000  -- ๋งˆ์ง€๋ง‰์œผ๋กœ ์กฐํšŒํ•œ id
ORDER BY id
LIMIT 20;

๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹์ด ํ›จ์”ฌ ํšจ์œจ์ ์ด์—์š”. ํŠนํžˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„ ๋•Œ ์ฐจ์ด๊ฐ€ ํฌ๊ฒŒ ๋‚˜ํƒ€๋‚˜์ฃ !

3.6. ์ฟผ๋ฆฌ ์บ์‹ฑ ํ™œ์šฉํ•˜๊ธฐ ๐Ÿ’พ

์ž์ฃผ ์‹คํ–‰๋˜๋Š” ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•ด๋‘๋ฉด ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์š”.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์ฒด์˜ ์ฟผ๋ฆฌ ์บ์‹œ๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ์บ์‹ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, Redis๋‚˜ Memcached ๊ฐ™์€ ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ฃ . ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์ด๋Ÿฐ ๋Š๋‚Œ์ด์—์š”:


// ์˜์‚ฌ ์ฝ”๋“œ
function getPopularProducts() {
    if (cache.has("popular_products")) {
        return cache.get("popular_products");
    } else {
        result = executeQuery("SELECT * FROM products ORDER BY sales DESC LIMIT 10");
        cache.set("popular_products", result, "1 hour");
        return result;
    }
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด์š”. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ€ํ•˜๋„ ์ค„์ด๊ณ , ์‘๋‹ต ์†๋„๋„ ๋นจ๋ผ์ง€์ฃ !

SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™” ํ…Œํฌ๋‹‰ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™” ํ…Œํฌ๋‹‰ WHERE ์ ˆ ์ตœ์ ํ™” GROUP BY/ORDER BY ์ตœ์ ํ™” EXPLAIN ํ™œ์šฉ ์ž„์‹œ ํ…Œ์ด๋ธ” ํ™œ์šฉ ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ตœ์ ํ™” ์ฟผ๋ฆฌ ์บ์‹ฑ ํ™œ์šฉ

์ž, ์ด๋ ‡๊ฒŒ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ์‹ค์ „ ํ…Œํฌ๋‹‰๋“ค์„ ์‚ดํŽด๋ดค์–ด์š”. ์ด ํ…Œํฌ๋‹‰๋“ค์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋งˆ์น˜ ์ดˆ์Œ์† ์ œํŠธ๊ธฐ์ฒ˜๋Ÿผ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•  ๊ฑฐ์˜ˆ์š”! ๐Ÿš€

ํ•˜์ง€๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”. ์ตœ์ ํ™”๋Š” ํ•œ ๋ฒˆ์— ๋๋‚˜๋Š” ๊ฒŒ ์•„๋‹ˆ์—์š”. ์ง€์†์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๊ฐœ์„ ์ด ํ•„์š”ํ•ด์š”. ๋งˆ์น˜ ์šด๋™์„ ๊พธ์ค€ํžˆ ํ•ด์•ผ ๊ฑด๊ฐ•ํ•ด์ง€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ๐Ÿ’ช

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์ด๋Ÿฐ ์ตœ์ ํ™” ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ป๊ฒŒ ์ธก์ •ํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ์ค€๋น„๋˜์…จ๋‚˜์š”? Let's go! ๐Ÿƒโ€โ™‚๏ธ๐Ÿ’จ

4. SQL ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋ถ„์„ํ•˜๊ธฐ ๐Ÿ“Š

์ž, ์ด์ œ ์šฐ๋ฆฌ๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์–ด์š”. ๊ทธ๋Ÿฐ๋ฐ ๊ณผ์—ฐ ์šฐ๋ฆฌ์˜ ์ตœ์ ํ™” ์ž‘์—…์ด ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์„๊นŒ์š”? ๐Ÿค”

์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SQL ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ด์š”. ๋งˆ์น˜ ์˜์‚ฌ๊ฐ€ ํ™˜์ž์˜ ์ƒํƒœ๋ฅผ ์ง„๋‹จํ•˜๋“ฏ์ด, ์šฐ๋ฆฌ๋„ ์ฟผ๋ฆฌ์˜ '๊ฑด๊ฐ• ์ƒํƒœ'๋ฅผ ์ฒดํฌํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”! ๐Ÿ‘จโ€โš•๏ธ

4.1. ์‹คํ–‰ ๊ณ„ํš ๋ถ„์„ํ•˜๊ธฐ ๐Ÿ•ต๏ธโ€โ™€๏ธ

์•ž์„œ ๋ฐฐ์šด EXPLAIN ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด ์‹คํ–‰ ๊ณ„ํš์„ ๋ถ„์„ํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”. ์‹คํ–‰ ๊ณ„ํš์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€์— ๋Œ€ํ•œ ๋กœ๋“œ๋งต์ด์—์š”.

์‹คํ–‰ ๊ณ„ํš์„ ํ†ตํ•ด ์ธ๋ฑ์Šค ์‚ฌ์šฉ ์—ฌ๋ถ€, ํ…Œ์ด๋ธ” ์Šค์บ” ๋ฐฉ์‹ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?


EXPLAIN SELECT * FROM users WHERE email = 'example@email.com';

์ด ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•ด์„ํ•ด๋ณด๋ฉด:

  • ๐Ÿ” type: ํ…Œ์ด๋ธ” ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ด์š”. 'const', 'ref'๋Š” ์ข‹๊ณ , 'ALL'์€ ๋‚˜์œ ์‹ ํ˜ธ์˜ˆ์š”.
  • ๐Ÿ”ข rows: ๊ฒ€์ƒ‰ํ•˜๋Š” ํ–‰์˜ ์ˆ˜์˜ˆ์š”. ์ž‘์„์ˆ˜๋ก ์ข‹์•„์š”.
  • ๐Ÿ—๏ธ key: ์‚ฌ์šฉ๋œ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด์š”. NULL์ด๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฑฐ์˜ˆ์š”.

4.2. ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„ ์ธก์ •ํ•˜๊ธฐ โฑ๏ธ

์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ง์ ‘ ์ธก์ •ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์—์š”. MySQL์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์š”:


SET profiling = 1;
SELECT * FROM users WHERE email = 'example@email.com';
SHOW PROFILES;

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์–ด์š”. ์ตœ์ ํ™” ์ „ํ›„๋ฅผ ๋น„๊ตํ•ด๋ณด๋ฉด ํšจ๊ณผ๋ฅผ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ฃ !

๐Ÿ’ก Tip: ๋ฒค์น˜๋งˆํ‚น ๋„๊ตฌ ํ™œ์šฉํ•˜๊ธฐ

Apache JMeter๋‚˜ Siege ๊ฐ™์€ ๋ฒค์น˜๋งˆํ‚น ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์ •ํ™•ํ•œ ์„ฑ๋Šฅ ์ธก์ •์ด ๊ฐ€๋Šฅํ•ด์š”.

4.3. ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ ๋กœ๊ทธ ๋ถ„์„ํ•˜๊ธฐ ๐Ÿ“

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ ๋กœ๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์‹คํ–‰ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ฟผ๋ฆฌ๋“ค์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์š”.

์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ ๋กœ๊ทธ๋Š” ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ํ•„์š”ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ฐพ๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•ด์š”!

MySQL์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”:


SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;  // 1์ดˆ ์ด์ƒ ๊ฑธ๋ฆฌ๋Š” ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋ก

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด 1์ดˆ ์ด์ƒ ๊ฑธ๋ฆฌ๋Š” ์ฟผ๋ฆฌ๋“ค์ด ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋ก๋ผ์š”. ์ด ๋กœ๊ทธ๋ฅผ ๋ถ„์„ํ•ด์„œ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ์ฟผ๋ฆฌ๋“ค์„ ์ฐพ์„ ์ˆ˜ ์žˆ์ฃ .

4.4. ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ ๐Ÿ“ˆ

์ฟผ๋ฆฌ ์„ฑ๋Šฅ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰๊ณผ๋„ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ์–ด์š”. CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ I/O ๋“ฑ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ด์š”.

๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•˜๋Š” ์‹œ์ ์„ ํŒŒ์•…ํ•˜๋ฉด, ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์š”.

Linux ์„œ๋ฒ„์—์„œ๋Š” top, iostat, vmstat ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋” ํŽธ๋ฆฌํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด์„œ๋Š” Prometheus, Grafana ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ฃ .

4.5. ์ฟผ๋ฆฌ ํŠœ๋‹ ๋„๊ตฌ ํ™œ์šฉํ•˜๊ธฐ ๐Ÿ› ๏ธ

๋งˆ์ง€๋ง‰์œผ๋กœ, ์ „๋ฌธ์ ์ธ ์ฟผ๋ฆฌ ํŠœ๋‹ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด์—์š”. ์ด๋Ÿฐ ๋„๊ตฌ๋“ค์€ ๋ณต์žกํ•œ ๋ถ„์„์„ ์ž๋™ํ™”ํ•ด์ฃผ๊ณ , ์ตœ์ ํ™” ์ œ์•ˆ๊นŒ์ง€ ํ•ด์ค˜์š”.

  • ๐Ÿ”ง MySQL Workbench: ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ณ„ํš ์‹œ๊ฐํ™”, ์„ฑ๋Šฅ ์Šคํ‚ค๋งˆ ๋ถ„์„ ๋“ฑ์„ ์ œ๊ณตํ•ด์š”.
  • ๐Ÿ”ง Percona Toolkit: ๋‹ค์–‘ํ•œ MySQL ์„ฑ๋Šฅ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ด์š”.
  • ๐Ÿ”ง SolarWinds Database Performance Analyzer: ์ƒ์„ธํ•œ ์„ฑ๋Šฅ ๋ถ„์„๊ณผ ํŠœ๋‹ ์ œ์•ˆ์„ ํ•ด์ค˜์š”.
SQL ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋ถ„์„ ๋ฐฉ๋ฒ• SQL ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋ถ„์„ ๋ฐฉ๋ฒ• ์‹คํ–‰ ๊ณ„ํš ๋ถ„์„ ์‹คํ–‰ ์‹œ๊ฐ„ ์ธก์ • ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ ๋กœ๊ทธ ๋ถ„์„ ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ํŠœ๋‹ ๋„๊ตฌ ํ™œ์šฉ

์ž, ์ด๋ ‡๊ฒŒ SQL ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ์•Œ์•„๋ดค์–ด์š”. ์ด ๋ฐฉ๋ฒ•๋“ค์„ ํ™œ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์–ด๋–ค ์ƒํƒœ์ธ์ง€, ์–ด๋–ค ๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•ด์•ผ ํ• ์ง€ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.

์„ฑ๋Šฅ ๋ถ„์„์€ ๋งˆ์น˜ ํƒ์ • ๋†€์ด ๊ฐ™์•„์š”. ๐Ÿ•ต๏ธโ€โ™€๏ธ ๋ฌธ์ œ์˜ ์›์ธ์„ ์ฐพ์•„ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์ด ๋•Œ๋กœ๋Š” ํž˜๋“ค์ง€๋งŒ, ๊ทธ๋งŒํผ ๋ณด๋žŒ์ฐจ๊ณ  ์žฌ๋ฏธ์žˆ๋‹ต๋‹ˆ๋‹ค!

์ž, ์ด์ œ ์šฐ๋ฆฌ๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ , ๊ทธ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ๋ชจ๋‘ ๋ฐฐ์› ์–ด์š”. ์—ฌ๋Ÿฌ๋ถ„์€ ์ด์ œ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ๋‹ฌ์ธ์ด ๋˜์…จ์–ด์š”! ๐Ÿ†

ํ•˜์ง€๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”. ๊ธฐ์ˆ ์˜ ์„ธ๊ณ„๋Š” ํ•ญ์ƒ ๋ณ€ํ™”ํ•˜๊ณ  ์žˆ์–ด์š”. ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ๊ณผ ๋ฐฉ๋ฒ•๋“ค์ด ๊ณ„์†ํ•ด์„œ ๋‚˜์˜ค๊ณ  ์žˆ์ฃ . ๊ทธ๋Ÿฌ๋‹ˆ ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ์‹œ๋„ํ•ด๋ณด๋Š” ์ž์„ธ๊ฐ€ ์ค‘์š”ํ•ด์š”.

์—ฌ๋Ÿฌ๋ถ„์˜ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™” ์—ฌ์ •์ด ์ฆ๊ฒ๊ณ  ๋ณด๋žŒ์ฐผ์œผ๋ฉด ์ข‹๊ฒ ์–ด์š”. ํ™”์ดํŒ…! ๐Ÿ’ช๐Ÿ˜Š

5. ๋งˆ๋ฌด๋ฆฌ: SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ์—ฌ์ • ๐Ÿš€

์ž, ์—ฌ๋Ÿฌ๋ถ„! ๊ธด ์—ฌ์ •์ด์—ˆ์ง€๋งŒ ๋“œ๋””์–ด SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ์„ธ๊ณ„๋ฅผ ๋ชจ๋‘ ํƒํ—˜ํ–ˆ์–ด์š”. ์–ด๋– ์…จ๋‚˜์š”? ์žฌ๋ฏธ์žˆ์œผ์…จ๋‚˜์š”? ๐Ÿ˜Š

์šฐ๋ฆฌ๋Š” ์ด ์—ฌ์ •์„ ํ†ตํ•ด SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ์ค‘์š”์„ฑ, ๊ธฐ๋ณธ ์›์น™, ์‹ค์ „ ํ…Œํฌ๋‹‰, ๊ทธ๋ฆฌ๊ณ  ์„ฑ๋Šฅ ๋ถ„์„ ๋ฐฉ๋ฒ•๊นŒ์ง€ ๋ชจ๋‘ ๋ฐฐ์› ์–ด์š”. ๋งˆ์น˜ ์žฌ๋Šฅ๋„ท์—์„œ SQL ๋งˆ์Šคํ„ฐ ํด๋ž˜์Šค๋ฅผ ๋“ค์€ ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‚˜์š”?

์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์€:

  • ๐ŸŽฏ SQL ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์ด ์™œ ์ค‘์š”ํ•œ์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ์–ด์š”.
  • ๐Ÿ› ๏ธ ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ…Œํฌ๋‹‰์„ ๋ฐฐ์› ์–ด์š”.
  • ๐Ÿ“Š ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๊ณ  ์ธก์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜์—ˆ์–ด์š”.
  • ๐Ÿ•ต๏ธโ€โ™€๏ธ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ฐพ์•„๋‚ด๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์–ด์š”.

ํ•˜์ง€๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”. ์ด๊ฒƒ์€ ๋์ด ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ์‹œ์ž‘์ด์—์š”!

๐Ÿ’ก SQL ์ตœ์ ํ™”๋Š” ๊ณ„์†๋˜๋Š” ์—ฌ์ •์ด์—์š”!

๊ธฐ์ˆ ์€ ๊ณ„์† ๋ฐœ์ „ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋Š” ๊ณ„์† ์ฆ๊ฐ€ํ•ด์š”. ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ์ ์šฉํ•˜๋Š” ์ž์„ธ๊ฐ€ ์ค‘์š”ํ•ด์š”.

์—ฌ๋Ÿฌ๋ถ„์˜ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™” ์Šคํ‚ฌ์„ ๊ณ„์† ๋ฐœ์ „์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•๋“ค์„ ์ถ”์ฒœํ•ด์š”:

  1. ๐Ÿ“š ๊ณ„์†ํ•ด์„œ ๊ณต๋ถ€ํ•˜์„ธ์š”: ์ƒˆ๋กœ์šด SQL ๊ธฐ๋Šฅ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ๋“ฑ์„ ์ฃผ์‹œํ•˜์„ธ์š”.
  2. ๐Ÿ‹๏ธโ€โ™€๏ธ ์‹ค์ „ ์—ฐ์Šต์„ ๋งŽ์ด ํ•˜์„ธ์š”: ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ ์šฉํ•ด๋ณด์„ธ์š”.
  3. ๐Ÿค ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ฐธ์—ฌํ•˜์„ธ์š”: ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ณ  ์ƒˆ๋กœ์šด ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์œผ์„ธ์š”.
  4. ๐Ÿ”ฌ ์‹คํ—˜์„ ๋‘๋ ค์›Œํ•˜์ง€ ๋งˆ์„ธ์š”: ์ƒˆ๋กœ์šด ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด๋ณด๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•ด๋ณด์„ธ์š”.
  5. ๐ŸŽ“ ์ž๊ฒฉ์ฆ์— ๋„์ „ํ•ด๋ณด์„ธ์š”: SQL ๊ด€๋ จ ์ž๊ฒฉ์ฆ ์ทจ๋“์„ ํ†ตํ•ด ์‹ค๋ ฅ์„ ์ธ์ •๋ฐ›์•„๋ณด์„ธ์š”.

๋งˆ์ง€๋ง‰์œผ๋กœ, SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋Š” ๋‹จ์ˆœํžˆ ๊ธฐ์ˆ ์ ์ธ ์Šคํ‚ฌ๋งŒ์ด ์•„๋‹ˆ์—์š”. ์ด๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ์„ฑ๊ณผ๋ฅผ ๋†’์ด๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ด์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ ๋…ธ๋ ฅ์ด ์‹ค์ œ๋กœ ์–ด๋–ค ๋ณ€ํ™”๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š”์ง€ ํ•ญ์ƒ ์ƒ๊ฐํ•ด๋ณด์„ธ์š”.

์ž, ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์€ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ๋‹ฌ์ธ์ด ๋˜์…จ์–ด์š”! ๐Ÿ† ์ด ์ง€์‹์„ ํ™œ์šฉํ•ด ๋” ๋‚˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋” ๋น ๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ SQL ์ฟผ๋ฆฌ๊ฐ€ ๋งˆ์น˜ ๊ด‘์†์œผ๋กœ ์›€์ง์ด๋Š” ์šฐ์ฃผ์„ ์ฒ˜๋Ÿผ ๋นจ๋ผ์งˆ ๊ฑฐ์˜ˆ์š”! ๐Ÿš€

SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™”์˜ ์„ธ๊ณ„์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ชจํ—˜์€ ์ด์ œ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค. ํ™”์ดํŒ…! ๐Ÿ’ช๐Ÿ˜Š

SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™” ์—ฌ์ • ์‹œ์ž‘ ํ•™์Šต ๋งˆ์Šคํ„ฐ SQL ์ฟผ๋ฆฌ ์ตœ์ ํ™” ์—ฌ์ •