๐Ÿ‘จโ€๐Ÿ’ป ์ฟผ๋ฆฌ๋ณ€ํ™˜

 

1. ์ฟผ๋ฆฌ๋ณ€ํ™˜์ด๋ž€?

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

๐Ÿ’  ์ฟผ๋ฆฌ๋ณ€ํ™˜์˜ ํ•„์š”์„ฑ

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

๐Ÿ’  ๋‹ด๋‹น ์ปดํฌ๋„ŒํŠธ (Oracle ๊ธฐ์ค€)

Oracle ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ํฌ๊ฒŒ ์„ธ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ทธ ์ค‘ Query Transformer๊ฐ€ ์ฟผ๋ฆฌ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • Query Transfomer โ†’ ์ฟผ๋ฆฌ ๋ณ€ํ™˜ ์ˆ˜ํ–‰
  • Estimator โ†’ ๋น„์šฉ ๊ณ„์‚ฐ
  • Plan Generator โ†’ ์ตœ์ข… ์‹คํ–‰ ๊ณ„ํš ์ƒ์„ฑ

๐Ÿ’  ์ž‘๋™ ๋ฐฉ์‹ (Oracle ๊ธฐ์ค€)

Oracle ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์˜ ์ฟผ๋ฆฌ ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํœด๋ฆฌ์Šคํ‹ฑ(Heuristic) ์ฟผ๋ฆฌ ๋ณ€ํ™˜: ๋น„์šฉ ๊ณ„์‚ฐ ์—†์ด, ๋ฌด์กฐ๊ฑด ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰
  • ๋น„์šฉ๊ธฐ๋ฐ˜(Cost-based) ์ฟผ๋ฆฌ ๋ณ€ํ™˜: ๋ณ€ํ™˜๋œ ์ฟผ๋ฆฌ์™€ ์›๋ณธ ์ฟผ๋ฆฌ์˜ ๋น„์šฉ์„ ๋น„๊ต ํ›„ ๋” ํšจ์œจ์ ์ธ ์ชฝ์„ ์„ ํƒ