Database

Database

Tags
Backend
Published
Author

Database๋ž€

์—ฌ๋Ÿฌ ์‘์šฉํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ๊ณต์œ  ๋˜๋Š” ์ด์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฒด๊ณ„์ ์œผ๋กœ ํ†ตํ•ฉ, ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋“ค์˜ ์ง‘ํ•ฉ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ?

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

๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์กฐ๊ฑด์˜ ์ข…๋ฅ˜์™€ ๊ฐœ๋…

  1. ๊ฐœ์ฒด ๋ฌด๊ฒฐ์„ฑ
    1. ํ…Œ์ด๋ธ”์€ ๊ธฐ๋ณธํ‚ค๋ฅผ ์ง€์ •ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ๋ฌด๊ฒฐ์„ฑ ์›์น™์„ ์ง€์ผœ์•ผ ํ•˜๋Š” ์กฐ๊ฑด
    2. ๊ธฐ๋ณธํ‚ค(Primary Key)์—๋Š” null ๊ฐ’์ด ์˜ฌ ์ˆ˜ ์—†์Œ
      1. ๊ธฐ๋ณธํ‚ค๋ž€ ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ํ–‰(row)๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ํ›„๋ณด ํ‚ค ์ค‘์—์„œ ์„ ํƒ๋œ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž ํ‚ค
  1. ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ
    1. ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ์„ ์–ธํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด
    2. ์™ธ๋ž˜ํ‚ค(Foregin Key)์˜ ๊ฐ’์€ null์ด๊ฑฐ๋‚˜ ์ฐธ์กฐ ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธํ‚ค ๊ฐ’๊ณผ ๋™์ผํ•ด์•ผํ•จ
    3. ์™ธ๋ž˜ํ‚ค ์†์„ฑ์€ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์„ ์ง€๋‹ ์ˆ˜ ์—†์Œ
      1. ์™ธ๋ž˜ํ‚ค๋ž€ ํ‚ค ์ค‘์—์„œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํ–‰(row)์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค
  1. ๋„๋ฉ”์ธ ๋ฌด๊ฒฐ์„ฑ
    1. ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ํ•„๋“œ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ ํ•„๋“œ์˜ ํƒ€์ž…, null ๊ฐ’ ํ—ˆ์šฉ ๋“ฑ์— ๋Œ€ํ•œ ์‚ฌํ•ญ์„ ์ •์˜ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์กฐ๊ฑด
  1. Null๋ฌด๊ฒฐ์„ฑ
    1. ํŠน์„ฑ ์†์„ฑ๊ฐ’์— NULL์ด ์˜ฌ ์ˆ˜ ์—†๋‹ค๋Š” ์กฐ๊ฑด์ด ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ ๊ทธ ์†์„ฑ๊ฐ’์€ NULL ๊ฐ’์ด ์˜ฌ ์ˆ˜ ์—†๋‹ค๋Š” ์ œ์•ฝ ์กฐ๊ฑด
  1. ๊ณ ์œ  ๋ฌด๊ฒฐ์„ฑ
    1. ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์†์„ฑ์— ๋Œ€ํ•ด ๊ฐ ๋ ˆ์ฝ”๋“ค์ด ๊ฐ–๋Š” ๊ฐ’๋“ค์ด ์„œ๋กœ ๋‹ฌ๋ผ์•ผ ํ•˜๋Š” ์กฐ๊ฑด
  1. ํ‚ค ๋ฌด๊ฒฐ์„ฑ
    1. ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—๋Š” ์ ์–ด๋„ ํ•˜๋‚˜์˜ ํ‚ค๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด
  1. ๊ด€๊ณ„ ๋ฌด๊ฒฐ์„ฑ
    1. ํ…Œ์ด๋ธ”์˜ ์–ด๋Š ํ•œ ํ–‰์˜ ์‚ฝ์ž… ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๋˜๋Š” ํ•œ ํ…Œ์ด๋ธ”๊ณผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํ–‰๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„์— ๋Œ€ํ•œ ์ ์ ˆ์„ฑ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ์กฐ๊ฑด

DBMS : Database Management System

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ SWํŒจํ‚ค์ง€ ์ง‘ํ•ฉ์ฒด

๊ธฐ๋Šฅ

  • ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€/์กฐํšŒ/๋ณ€๊ฒฝ/์‚ญ์ œ
  • ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ ์ฒดํฌ
  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ
  • ๋ฐ์ดํ„ฐ์˜ ๋ฐฑ์—… ๋ฐ ๋ณต์›
  • ๋ฐ์ดํ„ฐ ๋ณด์•ˆ ๊ด€๋ฆฌ

DBMS ๋ฐœ์ „๊ณผ์ •

  1. ํŒŒ์ผ ์‹œ์Šคํ…œ (ISSAM, VSAM)
  1. ๊ณ„์ธตํ˜• (HDBMS)
  1. ๋„คํŠธ์›Œํฌํ˜• (NDBMS)
  1. ๊ด€๊ณ„ํ˜• (RDBMS)
  1. NO SQL

Database Object

ํ•ญ๋ชฉ
์„ค๋ช…
ํ…Œ์ด๋ธ”
ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ์„ฑ๋œ 2์ฐจ์›์ ์ธ ํ‘œ
์‹œํ€€์Šค
์ •์ˆ˜ํ˜• ๋ฒˆํ˜ธํ‘œ ์ƒ์„ฑ๊ธฐ
์ธ๋ฑ์Šค
๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ
ํ”„๋กœ์‹œ์ €
๋ฐ˜ํ™˜ ํƒ€์ž…์ด ์—†๋Š” ๊ฐ์ฒด
ํ•จ์ˆ˜
๋ฐ˜ํ™˜ ํƒ€์ž…์ด ์žˆ๋Š” ๊ฐ์ฒด

์Šคํ‚ค๋งˆ(Schema)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ(๊ฐœ์ฒด, ์†์„ฑ, ๊ด€๊ณ„)์™€ ์ œ์•ฝ ์กฐ๊ฑด์— ๋Œ€ํ•œ ์ •์˜
  • DBMS๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋ช…๋ น์„ ์ˆ˜ํ–‰
notion image

์™ธ๋ถ€ ์Šคํ‚ค๋งˆ = ์‚ฌ์šฉ์ž ๋ทฐ

  • ๊ฐœ์ธ์˜ ์ž…์žฅ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ
  • ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‹œ์Šคํ…œ์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์™ธ๋ถ€ ์Šคํ‚ค๋งˆ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•˜๋‚˜์˜ ์™ธ๋ถ€ ์Šคํ‚ค๋งˆ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์งˆ์˜์–ด(SQL)์„ ์ด์šฉํ•˜์—ฌ DB๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ

๊ฐœ๋… ์Šคํ‹ฐ๋งˆ = ์ „์ฒด์ ์ธ ๋ทฐ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ „์ฒด์ ์ธ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ, ๋ชจ๋“  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์‚ฌ์šฉ์ž๋“ค์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ข…ํ•ฉํ•œ ์กฐ์ง ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ํ•˜๋‚˜๋งŒ ์กด์žฌ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ ‘๊ทผ ๊ถŒํ•œ, ๋ณด์•ˆ ๋ฐ ๋ฌด๊ฒฐ์„ฑ ๊ทœ์น™์— ๊ด€ํ•œ ๋ช…์„ธ๋ฅผ ์ •์˜
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ

๋‚ด๋ถ€ ์Šคํ‚ค๋งˆ = ์ €์žฅ ์Šคํ‚ค๋งˆ

  • ๋ฌผ๋ฆฌ์  ์ €์žฅ์žฅ์น˜์˜ ์ž…์žฅ์—์„œ ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ, ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ์œ„์น˜์™€ ๋ฐ€์ ‘ํ•œ ๊ณ„์ธต
  • ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋  ํ–‰์˜ ๋ฌผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ์ €์žฅ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์˜ ํ‘œํ˜„๋ฐฉ๋ฒ•, ๋‚ด๋ถ€ ํ–‰์˜ ๋ฌผ์ง€์ ์ธ ์ˆœ์„œ ๋“ฑ์„ ๋‚˜ํƒ€๋ƒ„

์˜ตํ‹ฐ๋งˆ์ด์ €

๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ SQL์„ ์ˆ˜ํ–‰ํ•  ์ตœ์ ์˜ ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” DBMS์˜ ํ•ต์‹ฌ ์—”์ง„์ด๋‹ค.
notion image

์ฟผ๋ฆฌ ์‹คํ–‰ ์ ˆ์ฐจ

  1. Parsing
  1. Optimization
  1. Generation
  1. Execution

SQL Parsing

  • DBMS๋Š” ์šฐ๋ฆฌ๊ฐ€ ์„ธ์šด ์‹คํ–‰ ๊ณ„ํš์„ ์ชผ๊ฐœ์„œ SQLํŒŒ์„œ๋ฅผ ํ†ตํ•ด ์˜ตํ‹ฐ๋งˆ์ด์ €๋กœ ํŒŒ์‹ฑํ•จ
  • ์šฐ๋ฆฌ๊ฐ€ ์ „์†กํ•œ SQL์„ ์ชผ๊ฐœ์„œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์ด๋ฅผ ํŒŒ์‹ฑํ•ด์„œ ํŒŒ์‹ฑํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.
  • SQL๋ฌธ์žฅ์˜ ๋ฌธ๋ฒ•์ ์ธ ๊ฒ€์‚ฌ๋Š” ํŒŒ์‹ฑ๋‹จ๊ณ„์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

Optimization

  • SQL ํŒŒ์‹ฑํŠธ๋ฆฌ๋ฅด ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋™์ž‘์„ ์ˆ˜ํ–‰
  • Query Transformer : ํŒŒ์‹ฑ๋œ SQL์„ ๋ณด๊ณ  ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋˜ ์ข€ ๋” ๋‚˜์€ ์‹คํ–‰ ๊ณ„ํš์„ ๊ฐ–๋Š” SQL๋กœ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ํŒ๋‹จํ•˜์—ฌ ๋ณ€ํ™˜ ์ž‘์—…์„ ์ˆ˜ํ–‰
  • Estimator : ์‹œ์Šคํ…œ ํ†ต๊ณ„์ •๋ณด๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์ˆ˜์ง‘ํ•˜์—ฌ SQL์„ ์‹คํ–‰ํ•  ๋•Œ ์†Œ์š”๋˜๋Š” ์ด ๋น„์šฉ์„ ๊ณ„์‚ฐ
  • Generation : ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ƒ์„ฑํ•œ ์‹คํ–‰๊ณ„ํš์„ SQL ์—”์ง„์ด ์‹ค์ œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋‚˜ ํ”„๋กœ์‹œ์ € ํ˜•ํƒœ๋กœ ํฌ๋งทํŒ…ํ•œ๋‹ค.
  • Execution : ํฌ๋งทํŒ…๋œ SQL์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

์ธ๋ฑ์Šค(index)

์ถ”๊ฐ€์ ์ธ ์“ฐ๊ธฐ ์ž‘์—…๊ณผ ์ €์žฅ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
  • ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋”” ์œ„์น˜ํ•˜์˜€๋Š”์ง€ ์œ„์น˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ์ฃผ์†Œ๋ก ๊ฐœ๋…
  • ๊ธฐ๋ณธ์›๋ฆฌ : ํ…Œ์ด๋ธ” ์ „์ฒด ์Šค์บ” โ†’ ์ •๋ ฌ โ†’ ๋ธ”๋ก ๊ธฐ๋ก

์ธ๋ฑ์Šค ํƒ€์ž… ์ข…๋ฅ˜

ใ…ค
ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค
๋ณด์กฐ ์ธ๋ฑ์Šค
์†๋„
๋น ๋ฅด๋‹ค
๋Š๋ฆฌ๋‹ค
์‚ฌ์šฉ ๋ฉ”๋ชจ๋ฆฌ
์ ๋‹ค
๋งŽ๋‹ค
์ธ๋ฑ์Šค
์ธ๋ฑ์Šค๊ฐ€ ์ฃผ์š” ๋ฐ์ดํ„ฐ
์ธ๋ฑ์Šค๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ์‚ฌ๋ณธ
๊ฐœ์ˆ˜
ํ•œ ํ…Œ์ด๋ธ”์— ํ•œ ๊ฐœ
ํ•œ ํ…Œ์ด๋ธ”์— ์—ฌ๋Ÿฌ๊ฐœ
๋ฆฌํ”„ ๋…ธ๋“œ
๋ฆฌํ”„ ๋…ธ๋“œ ์ž์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ
๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์œ„์น˜
์ €์žฅ๊ฐ’
๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ ๋ธ”๋ก์˜ ํฌ์ธํ„ฐ
๊ฐ’๊ณผ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
์ •๋ ฌ
์ธ๋ฑ์Šค ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ˆœ์„œ๊ฐ€ ์ผ์น˜
์ธ๋ฑ์Šค ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ˆœ์„œ๊ฐ€ ๋ถˆ์ผ์น˜

ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)

notion image
ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ (Key, Value)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•  ๋•Œ ์œ ์šฉ
  • ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜์˜ DB ์ธ๋ฑ์Šค๋Š” (๋ฐ์ดํ„ฐ=์ปฌ๋Ÿผ์˜ ๊ฐ’, ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜)๋ฅผ (Key, Value)๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋Ÿผ์˜ ๊ฐ’์œผ๋กœ ์ƒ์„ฑ๋œ ํ•ด์‹œ๋ฅผ ํ†ตํ•ด ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ˜„
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ O(1)
  • ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฒ€์ƒ‰์„ ์œ„ํ•ด์„œ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

B+Tree

์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ B-Tree๋ฅผ ๊ฐœ์„ ์‹œํ‚จ ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ฆฌํ”„๋…ธ๋“œ(๋ฐ์ดํ„ฐ๋…ธ๋“œ)๋งŒ ์ธ๋ฑ์Šค์™€ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ(Value)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‚˜๋จธ์ง€ ๋…ธ๋“œ(์ธ๋ฑ์Šค๋…ธ๋“œ)๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์ธ๋ฑ์Šค(Key)๋งŒ์„ ๊ฐ–๋Š”๋‹ค.
  • ๋ฆฌํ”„๋…ธ๋“œ๋“ค์€ LinkedList๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ํฌ๊ธฐ๋Š” ์ธ๋ฑ์Šค ๋…ธ๋“œ์˜ ํฌ๊ธฐ์™€ ๊ฐ™์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
BTree์˜ ๋ฆฌํ”„๋…ธ๋“œ๋“ค์€ LinkedList๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ˆœ์ฐจ๊ฒ€์ƒ‰์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๋“ฑ BTree๋ฅผ ์ธ๋ฑ์Šค์— ๋งž๊ฒŒ ์ตœ์ ํ™”

ํŽ˜์ด์ง€(Page)

๋””์Šคํฌ์™€ ๋ฉ”๋ชจ๋ฆฌ(๋ฒ„ํผํ’€)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์ตœ์†Œ ์ž‘์—… ๋‹จ์œ„

์นด๋””๋‚ ๋ฆฌํ‹ฐ(Cardinality)

ํŠน์ • ์ปฌ๋Ÿผ์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ณ ์œ ์„ฑ์„ ์˜๋ฏธ
  • ์นด๋””๋‚ ๋ฆฌํ‹ฐ๊ฐ€ ๋†’์„์ˆ˜๋ก ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ์•„์ง€๋ฉฐ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์ด ๋งŽ๋‹ค๋Š” ๊ฒƒ

Nested Loops ์กฐ์ธ

NL ์กฐ์ธ์€ ๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”์˜ ํ•œ ๋กœ์šฐ์™€ย ๋งค์นญ๋˜๋Š” ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ” ๋‚ด ๋กœ์šฐ๋ฅผย ์ฐพ๊ธฐ์œ„ํ•ดย ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์กฐ์ธย ์ปฌ๋Ÿผย ๊ฐ’์ด ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ๋‘ ๋กœ์šฐ๋ฅผ ์—ฐ๊ฒฐ
notion image

๋“œ๋ผ์ด๋น™ ํ…Œ์ด๋ธ”

์กฐ์ธ ๋Œ€์ƒ ํ…Œ์ด๋ธ” ์ค‘ ๋จผ์ € ์•ก์„ธ์Šคํ•˜๋Š” ํ…Œ์ด๋ธ”, Outer table

๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”

์กฐ์ธ ๋Œ€์ƒ ํ…Œ์ด๋ธ” ์ค‘ ๋‚˜์ค‘์— ์•ก์„ธ์Šคํ•˜๋Š” ํ…Œ์ด๋ธ”, Inner table
Table A, Table B์˜ ๊ฒฐํ•ฉ ๋Œ€์ƒ ํ–‰ ์ˆ˜๋ฅผ R(A), R(B)๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์ ‘๊ทผ๋˜๋Š” ํ–‰ ์ˆ˜๋Š” R(A)*R(B) Nested Loops Join์—์„œ ์‹คํ–‰์‹œ๊ฐ„์€ R(A)*R(B)์— ๋น„๋ก€
์„ฑ๋Šฅ์„ ๋†’ํžˆ๊ธฐ ์œ„ํ•ด์„  R(A)*R(B)์˜ ๊ฐ’์„ ๋‚ฎ์ถฐ์•ผํ•œ๋‹ค.
โ‡’ Driving Table์ด ์ž‘์„ ์ˆ˜๋ก & Inner Table์˜ ๊ฒฐํ•ฉํ‚ค๊ฐ€ ํ•„๋“œ์— ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌ
notion image

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๊ทœํ™”

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ค๊ณ„์—์„œ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ •๊ทœํ˜•์— ๋งž๋„๋ก ๊ตฌ์กฐํ™”ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค

1. ์ œ 1 ์ •๊ทœํ™”

์ค‘๋ณต๋˜๋Š” ํ•ญ๋ชฉ์ด ์—†์–ด์•ผ ํ•œ๋‹ค.
  • ๊ฐœ๋ณ„ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ๊ทธ๋ฃน์„ ์ œ๊ฑฐ
  • ๊ฐ ๊ด€๋ จ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์„ ์ œ์ž‘
  • ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๊ด€๋ จ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์‹๋ณ„

2. ์ œ 2 ์ •๊ทœํ™”

ํ›„๋ณดํ‚ค K์™€ K์— ์†ํ•˜์ง€ ์•Š๋Š” ์†์„ฑ A๊ฐ€ ์žˆ์„ ๋•Œ, A๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด K์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ K ์ „์ฒด๋ฅผ ์ฐธ์กฐํ•ด์•ผ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ (์ข…์†)
  • ์—ฌ๋Ÿฌ ํ–‰์— ์ ์šฉ๋˜๋Š” ๊ฐ’ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์„ ์ œ์ž‘
  • ์™ธ๋ž˜ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์„ค์ •

3. ์ œ 3 ์ •๊ทœํ™”

ํ…Œ์ด๋ธ” ๋‚ด์˜ ํ‚ค๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ์ปฌ๋Ÿผ์ด ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ‚ค์— ์ดํ–‰์  ์ข…์†์ด ๋˜์ง€ ์•Š๋Š”๋‹ค
  • ํ‚ค์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ํ•„๋“œ๋ฅผ ์ œ๊ฑฐ

Index Seek

Non-Clustered Index๋ฅผ ์ธ๋ฑ์Šค ํŠธ๋ฆฌ๋ฅผ ํƒ€๊ณ  ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ
  • ํ•„์š”ํ•œ ๋ฆฌํ”„ ํŽ˜์ด์ง€๋งŒ ํƒ์ƒ‰ํ•˜์—ฌ ์ ‘๊ทผ

Index Scan VS Index Seek

  • Index Scan : ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์„ ๋ชจ๋‘ ์ฐพ์Œ
  • Index Seek : ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ๋ฐ”๋กœ ์ฐพ์•„๊ฐ

๋™์ ์ฟผ๋ฆฌ

  • MS-SQL์—์„œ ์ €์žฅ ํ”„๋กœ์‹œ์ €, Stored Procedure๋Š” ์‹คํ–‰ ๊ณ„ํš์ด ํ”Œ๋žœ ์บ์‹œ๋ผ๋Š” ๊ฐœ์ฒด์— ์บ์‹ฑ๋œ๋‹ค.
  • ์ฆ‰, ํ•œ๋ฒˆ ์ปดํŒŒ์ผ๋œ ์ €์žฅ ํ”„๋กœ์‹œ์ €๋Š” ์‹คํ–‰๊ณ„ํš์ด ๋งŒ๋ฃŒ๋˜๊ฑฐ๋‚˜, ์ƒˆ๋กœ์šด ์‹คํ–‰ ๊ณ„ํš์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ธฐ ์ „๊นŒ์ง€ ์บ์‹œ์—์„œ ์žฌ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค.

Plan Cache

  • SQL Server๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ ํ”„๋กœ์‹œ์ €, ์ž„์‹œ ๋ฐ ์ค€๋น„๋œ Transcat-SQL๋ฌธ, ํŠธ๋ฆฌ๊ฑฐ์™€ ๊ฐ™์€ ๊ฐœ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์นด์šดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ์ฒด์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋™์‹œ์— ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋™์  ์ฟผ๋ฆฌ๊ฐ€ Plan Cache์— ์บ์‹œ๋˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด

  1. EXEC()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
      • ๋™์ผํ•œ ๋™์  SQL ๋ฌธ์ž์—ด์ด ์‹คํ–‰๋˜๋”๋ผ๋„ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋‹ฌ๋ผ์งˆ ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์‹คํ–‰ ๊ณ„ํš์„ ์ƒ์„ฑ
      • ๋™์  ์ฟผ๋ฆฌ๋Š” ๋งค๋ฒˆ ์ƒˆ๋กญ๊ฒŒ ์ปดํŒŒ์ผ๋˜๋ฏ€๋กœ ์‹คํ–‰ ๊ณ„ํš์ด ์บ์‹œ์— ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.
      • ์„ฑ๋Šฅ์ด ์ด์Šˆ
  1. EXEC sp_executesql์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
      • ๋งค๋ฒˆ ๋™์ผํ•œ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์ด๋ผ๋„ ์ผ์ •ํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜ํ™”๋œ ํ˜•์‹์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • SQL Server๋Š” ์ผ์ •ํ•œ ํ˜•์‹์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์‹คํ–‰ ๊ณ„ํš์„ ์บ์‹œ์— ์ €์žฅํ•œ๋‹ค.
      • ์ฆ‰, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋”๋ผ๋„ ์‹คํ–‰ ๊ณ„ํš์ด ์บ์‹œ์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ์ฟผ๋ฆฌ ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

EXEC sp_executesql ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์ 

  1. Database Context
    1. ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์Šค์œ„์น˜ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐ์ฒด์— ์—‘์„ธ์Šคํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
      ex) DB1์—์„œ sp_executesql์„ ์‚ฌ์šฉํ•˜์—ฌ DB2์˜ ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ทฐ์— ์ง์ ‘ ์—‘์„ธ์Šค ๋ถˆ๊ฐ€
  1. Access to Local Variables
    1. ๋™์  SQL ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋œ ๋กœ์ปฌ ๋ณ€์ˆ˜์— ์ง์ ‘ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†๋‹ค.
      ๋กœ์ปฌ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜ํ™”๋œ ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค.
      DECLARE @LocalVariable INT = 123 DECLARE @DynamicSQL NVARCHAR(MAX) SET @DynamicSQL = N'SELECT @Parameter' EXEC sp_executesql @DynamicSQL, N'@Parameter INT', @LocalVariable
ย