๐Ÿ’ผ ์ž๊ฒฉ์ฆ/SQLD

[SQLD] SQL์ตœ์ ํ™”์™€ ๊ธฐ๋ณธ์›๋ฆฌ : ์˜ตํ‹ฐ๋งˆ์ด์ €, ์‹คํ–‰๊ณ„ํš, ์ธ๋ฑ์Šค, ํ…Œ์ด๋ธ” ์Šค์บ”, Nested Loop Join, Sort Merge Join, Hash Join

์—ฐ_์šฐ๋ฆฌ 2021. 11. 10. 17:46
๋ฐ˜์‘ํ˜•

https://lotuus.tistory.com/42

 

[SQLD] 21.11.20 ์ œ43ํšŒ SQL๊ฐœ๋ฐœ์ž ํ›„๊ธฐ, ๊ณต๋ถ€๋ฐฉ๋ฒ•, ์ •๋ฆฌ๋ณธ, 43ํšŒ ์ถœ์ œ๋ฌธ์ œ

2021๋…„ 11์›” 20์ผ ํ† ์š”์ผ ์ œ43ํšŒ SQL๊ฐœ๋ฐœ์ž ์ž๊ฒฉ์ฆ ์‹œํ—˜ ํ›„๊ธฐ ์˜ค๋Š˜ ๋ณด๊ณ ์™”๋‹ค! ๋‚ด ๊ณต๋ถ€๋ฐฉ๋ฒ•๊ณผ ์ •๋ฆฌ๋ณธ, ์ด๋ฒˆ์— ์‹œํ—˜์— ์ถœ์ œ๋œ ๋ฌธ์ œ๋“ค์„ ๊ธฐ์–ต๋‚˜๋Š”๋Œ€๋กœ ์ ์–ด๋ณด๊ฒ ๋‹ค ๊ฐœ์ธ์ ์œผ๋กœ ๊ธฐ์ถœ์ด๋‚˜ ๋ณต์›๋œ ๋ฌธ์ œ๊ฐ€

lotuus.tistory.com

 

[๋ชฉ์ฐจ]

๐Ÿ’š ์˜ตํ‹ฐ๋งˆ์ด์ € Optimizer : ์ตœ์ ์˜ ์‹คํ–‰๊ณ„ํš์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ
   ์˜ตํ‹ฐ๋งˆ์ด์ € ์ข…๋ฅ˜ : ๊ทœ์น™๊ธฐ๋ฐ˜/๋น„์šฉ๊ธฐ๋ฐ˜
   ์‹คํ–‰๊ณ„ํš EXECUTION PLAN
๐Ÿ’š ์ธ๋ฑ์Šค INDEX : ์ฐพ์•„๋ณด๊ธฐ
   B-TREE ์ธ๋ฑ์Šค : ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ธ๋ฑ์Šค 
      SQL Server์˜ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค (์ €์žฅ๊ตฌ์กฐ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜)
๐Ÿ’š ํ…Œ์ด๋ธ” ์Šค์บ”
   FULL TABLE SCAn
   INDEX SCAN
๐Ÿ’š JOIN ์กฐ์ธ ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜
   Nested Loop Join
   Sort Merge Join
   Hash Join

 

๐Ÿ’š ์˜ตํ‹ฐ๋งˆ์ด์ € Optimizer : ์ตœ์ ์˜ ์‹คํ–‰๊ณ„ํš์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ

์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” SQL๋ฌธ์— ๋Œ€ํ•ด ์ตœ์ ์˜ ์‹คํ–‰๋ฐฉ๋ฒ•(๊ณ„ํš)์„ ๊ฒฐ์ •ํ•œ๋‹ค.

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ๊ฒฐ์ •ํ•œ ์‹คํ–‰ ๊ณ„ํš๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

= ์˜ตํ‹ฐ๋ฐ”์ด์ €์˜ ์‹คํ–‰ ๊ณ„ํš์€ ์ˆ˜ํ–‰ ์†๋„์— ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

 

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

  ๊ทœ์น™๊ธฐ๋ฐ˜ ์˜ตํ‹ฐ๋งˆ์ด์ € Rule Based Optimizer ๋น„์šฉ๊ธฐ๋ฐ˜ ์˜ตํ‹ฐ๋งˆ์ด์ € Cost Based Optimizer 
์‹คํ–‰๊ณ„ํš
์ƒ์„ฑ๋ฐฉ๋ฒ•
SQL๋ฌธ์˜ ์ธ๋ฑ์Šค ์œ ๋ฌด, ์—ฐ์‚ฐ์ž ์ข…๋ฅ˜, ์ฐธ์กฐ๊ฐ์ฒด ๋“ฑ์˜ ์ •๋ณด์— ๋”ฐ๋ผ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ •ํ•ด์ ธ์žˆ๊ณ , 
์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰๊ณ„ํš์„ ์ƒ์„ฑํ•œ๋‹ค. 

์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ทœ์น™์ด ์ ์€ ์ผ๋Ÿ‰์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋ผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

1. ROWID๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์ผ ํ–‰์ธ ๊ฒฝ์šฐ

2. ํด๋Ÿฌ์Šคํ„ฐ ์กฐ์ธ์— ์˜ํ•œ ๋‹จ์ผ ํ–‰์ธ ๊ฒฝ์šฐ
3. ์œ ์ผํ•˜๊ฑฐ๋‚˜ PK๋ฅผ ๊ฐ€์ง„ ํ•ด์‹œ ํด๋Ÿฌ์Šคํ„ฐ ํ‚ค์— ์˜ํ•œ ๋‹จ์ผ ํ–‰์ธ ๊ฒฝ์šฐ..... 
SQL๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋น„์šฉ(์†Œ์š”์‹œ๊ฐ„, ์†Œ์š”์ž์› ๋“ฑ)์ด ๊ฐ€์žฅ ์ ์€ ์‹คํ–‰๊ณ„ํš์„ ์„ ํƒํ•œ๋‹ค.


ํ˜„์žฌ๋Š” ๋Œ€๋ถ€๋ถ„ ๋น„์šฉ๊ธฐ๋ฐ˜ ์˜ตํ‹ฐ๋งˆ์ด์ €๋งŒ ์ œ๊ณตํ•œ๋‹ค.


๋น„์šฉ์„ ์˜ˆ์ธกํ•˜๊ธฐ ์œ„ํ•ด ๊ทœ์น™๊ธฐ๋ฐ˜ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ข… ํ†ต๊ณ„์ •๋ณด๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.
(=์ •ํ™•ํ•œ ํ†ต๊ณ„์ •๋ณด๋ฅผ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค)

 

 

 

์‹คํ–‰๊ณ„ํš EXECUTION PLAN

SQL์—์„œ ์š”๊ตฌํ•œ ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ ˆ์ฐจ์™€ ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์‹คํ–‰๊ณ„ํš
๊ตฌ์„ฑ์š”์†Œ
์กฐ์ธ์ˆœ์„œ ์กฐ์ธ์ž‘์—… ์ˆ˜ํ–‰ ์‹œ ์ฐธ์กฐํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ์ˆœ์„œ
์กฐ์ธ๊ธฐ๋ฒ• ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•. NL JOIN, HASH JOIN, SORT MERGE JOIN...๋“ฑ
์•ก์„ธ์Šค๊ธฐ๋ฒ• ํ•œ ํ…Œ์ด๋ธ”์„ ์•ก์„ธ์Šคํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•. INDEX SCAN, FULL TABLE SCAN... ๋“ฑ
์ตœ์ ํ™”์ •๋ณด ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ์˜ˆ์ƒ๋˜๋Š” ๋น„์šฉ์‚ฌํ•ญ.
๋น„์šฉ์‚ฌํ•ญ์ด ํ‘œ์‹œ๋œ ๊ฒƒ์€ ๋น„์šฉ๊ธฐ๋ฐ˜ ์ตœ์ ํ™” ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰๊ณ„ํš์„ ์„ธ์› ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ ,
COST(์ƒ๋Œ€์ ์ธ ๋น„์šฉ์ •๋ณด),
CARD(์กฐ์ธ์„ ๋งŒ์กฑํ•œ ์ง‘ํ•ฉ์˜ ๊ฑด์ˆ˜),
BYTES(๊ฒฐ๊ณผ์ง‘ํ•ฉ์ด ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์–‘)๊ฐ€ ์žˆ๋‹ค.
์—ฐ์‚ฐ ์—ฌ๋Ÿฌ ์กฐ์ž‘์„ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์–ด๋‚ด๋Š” ์ผ๋ จ์˜ ์ž‘์—…

 

๐Ÿ“Œ ์˜ตํ‹ฐ๋งˆ์ด์ €์™€ ์‹คํ–‰๊ณ„ํš์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ๋ถ€์ ์ ˆํ•œ ๊ฒƒ์„ 2๊ฐœ ๊ณ ๋ฅด์‹œ์˜ค

1) SQL์ฒ˜๋ฆฌ ํ๋ฆ„๋„๋Š” ์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์˜ ํ‘œํ˜„์€ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค.    //์„ฑ๋Šฅ์ธก๋ฉด๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

2) ๊ทœ์น™๊ธฐ๋ฐ˜ ์˜ตํ‹ฐ๋งˆ์ด์ €์—์„œ ์ œ์ผ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋Š” ํ–‰์— ๋Œ€ํ•œ ๊ณ ์œ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

3) SQL์ฒ˜๋ฆฌ ํ๋ฆ„๋„๋Š” ์ธ๋ฑ์Šค ์Šค์บ” ๋ฐ ์ „์ฒด ํ…Œ์ด๋ธ” ์Šค์บ” ๋“ฑ์˜ ์•ก์„ธ์Šค ๊ธฐ๋ฒ•์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

4) ์ธ๋ฑ์Šค ๋ฒ”์œ„ ์Šค์บ”์€ ํ•ญ์ƒ ์—ฌ๋Ÿฌ๊ฑด์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.            //๊ฒฐ๊ณผ ๊ฑด ์ˆ˜ ๋งŒํผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด ํ•œ ๊ฑด๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’š ์ธ๋ฑ์Šค INDEX : ์ฐพ์•„๋ณด๊ธฐ

์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” '์ฐพ์•„๋ณด๊ธฐ'์™€ ์œ ์‚ฌํ•œ ๊ฐœ๋…์ด๋‹ค.

ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ ํƒ์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ, DML์ž‘์—…์€ ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค๋ฅผ ํ•จ๊ป˜ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๊ธฐ๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

B-TREE ์ธ๋ฑ์Šค : ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ธ๋ฑ์Šค

Root Block ๋ฃจํŠธ๋ธ”๋ก. ๊ฐ€์žฅ ์ตœ์ƒ์œ„์— ์œ„์น˜ํ•œ ๋ธ”๋ก
Branch Block  ๋ธŒ๋žœ์น˜๋ธ”๋ก. ๋‹ค์Œ ๋‹จ๊ณ„ ๋ธ”๋ก์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
Leaf Block ๋ฆฌํ”„๋ธ”๋ก. ๊ฐ€์žฅ ํ•˜์œ„์— ์œ„์น˜ํ•œ ๋ธ”๋ก.
์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ๋Š” ์นผ๋Ÿผ๊ฐ’, RID(RowID)์ˆœ์„œ๋กœ ์ •๋ ฌ๋œ๋‹ค.
์–‘๋ฐฉํ–ฅ๋งํฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ ๊ฒ€์ƒ‰์ด ์‰ฝ๋‹ค.

 

 

SQL Server์˜ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค (์ €์žฅ๊ตฌ์กฐ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜)

๊ตฌ๋ถ„ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค
๊ณตํ†ต์  ๋‘˜๋‹ค B-TREE ๋ฐฉ์‹์„ ์ด์šฉํ•œ๋‹ค.
RID ํ•„์š”์—ฌ๋ถ€ - ๋ฆฌํ”„ํŽ˜์ด์ง€ = ๋ฐ์ดํ„ฐํŽ˜์ด์ง€
   => ๋”ฐ๋ผ์„œ ํƒ์ƒ‰์— ํ•„์š”ํ•œ RID๊ฐ€ ํ•„์š”์—†๋‹ค.
- ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜์ •๋ณด(RID)๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.
์ •๋ ฌ ์ธ๋ฑ์Šค ์นผ๋Ÿผ์œผ๋กœ 
์ธ๋ฑ์Šค๋„ ์ •๋ ฌ
ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋„ ์ •๋ ฌ
์ธ๋ฑ์Šค ์นผ๋Ÿผ์œผ๋กœ 
์ธ๋ฑ์Šค๋งŒ ์ •๋ ฌ
ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋Š” ๊ทธ๋Œ€๋กœ
์ธ๋ฑ์Šค ์ˆ˜ ํ…Œ์ด๋ธ” ๋‹น 1๊ฐœ ์ธ๋ฑ์Šค ์ƒ์„ฑ๊ฐ€๋Šฅ ํ…Œ์ด๋ธ” ๋‹น ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธ๋ฑ์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ
๊ฒ€์ƒ‰์†๋„ ๋น ๋ฅด๋‹ค ๋Š๋ฆฌ๋‹ค
์ธ๋ฑ์Šค ๊ณต๊ฐ„ ์ ๊ฒŒ ์ฐจ์ง€ํ•œ๋‹ค ๋งŽ์ด ์ฐจ์ง€ํ•œ๋‹ค

ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค

 

 

๐Ÿ’š ํ…Œ์ด๋ธ” ์Šค์บ”

๊ตฌ๋ถ„ FULL TABLE SACN ์ „์ฒด ํ…Œ์ด๋ธ” ์Šค์บ” INDEX SCAN ์ธ๋ฑ์Šค ์Šค์บ”
์„ค๋ช…

๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐ€๋ฉฐ ์กฐ๊ฑด์— ๋งž์œผ๋ฉด ์ถ”์ถœ,
์กฐ๊ฑด์— ์•ˆ๋งž์œผ๋ฉด ๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

์žฌ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง€๋ฉฐ,
๋ธ”๋ก๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ณง ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ฆฌํ•œ๋‹ค.

๋”ฐ๋ผ์„œ SQL๋ฌธ์— ์กฐ๊ฑด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์กฐ๊ฑด์— ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋“ฑ์— ์‚ฌ์šฉํ•œ๋‹ค.
์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์นผ๋Ÿผ์˜ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ
๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ์•ก์„ธ์Šค ๊ธฐ๋ฒ•์ด๋‹ค.

์ธ๋ฑ์Šค์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์นผ๋Ÿผ์˜ ๊ฐ’์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ํ˜„์žฌ ์ฝ์€ RID๋ฅผ ์ด์šฉํ•ด ํ…Œ์ด๋ธ”์— ์—‘์„ธ์Šค ํ•ด์•ผํ•œ๋‹ค. = ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ธ๋ฑ์Šค ๊ตฌ์„ฑ ์นผ๋Ÿผ์˜ ์ˆœ์„œ, RID๋กœ ์ •๋ ฌ๋œ๋‹ค.
๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์œผ๋ฉด ๊ฒฐ๊ณผ๋„ ์ •๋ ฌ๋˜์–ด ๋ฐ˜ํ™˜๋œ๋‹ค.
๋ชจ๋“  ํ…Œ์ด๋ธ”์˜ ์œ„์น˜๋ฅผ ์•Œ๊ณ ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค


= ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์•ผํ•œ๋‹ค
= ํ•œ ์š”์ฒญ์— ์—ฌ๋Ÿฌ ๋ธ”๋ก์„ ์ฝ๋Š”๋‹ค
์ธ๋ฑ์Šค์— ์กด์žฌํ•˜๋Š” RID๋ฅผ ์ด์šฉํ•ด
๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•ํ•œ ์œ„์น˜๋ฅผ ์•Œ๊ณ ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค.
= ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ํ•„์š” ์—†๋‹ค.
= ํ•œ ์š”์ฒญ์— ํ•œ ๋ธ”๋ก์”ฉ ์ฝ๋Š”๋‹ค
ํ…Œ์ด๋ธ”์˜ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ ํšจ๊ณผ์ ์ด๋‹ค. ํ…Œ์ด๋ธ”์˜ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ ํšจ๊ณผ์ ์ด๋‹ค.

 

 

๐Ÿ’š JOIN ์กฐ์ธ ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜

A์™€ B ๋‘ ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์กฐ์ธํ•˜๊ณ , ๊ฒฐ๊ณผ์™€ C ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ๊ฒƒ(A-B-C)๊ณผ

A์™€ C ๋‘ ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์กฐ์ธํ•˜๊ณ , ๊ฒฐ๊ณผ์™€ B ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ๊ฒƒ(A-C-B)์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค!

 

๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ๋•Œ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์กฐ์ธ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

(A์™€ B๋ฅผ ์กฐ์ธํ• ๋•Œ๋Š” NL ์กฐ์ธ์œผ๋กœ, B์™€ C๋ฅผ ์กฐ์ธํ• ๋•Œ๋Š” HASH ์กฐ์ธ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ)

๊ตฌ๋ถ„ Nested Loop Join Sort Merge Join Hash Join
์กฐ์ธ ๋ฐฉ๋ฒ• ์„ ํ–‰ ํ…Œ์ด๋ธ”์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ํ›„ํ–‰ ํ…Œ์ด๋ธ”์„ ์ฝ์œผ๋ฉด์„œ ์กฐ์ธ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. (์ค‘์ฒฉ๋œ ๋ฐ˜๋ณต๋ฌธ๊ณผ ์œ ์‚ฌ)

์„ ํ–‰ ํ…Œ์ด๋ธ”์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰ ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต๋จ.

์กฐ์ธ์ด ์„ฑ๊ณตํ•˜๋ฉด ๋ฐ”๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.
์กฐ์ธ ์นผ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์ •๋ ฌํ•˜์—ฌ ์กฐ์ธ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์กฐ์ธํ•  ํ…Œ์ด๋ธ”์ด ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด์žˆ๋‹ค๋ฉด ์ •๋ ฌ ์ž‘์—…์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„์ˆ˜๋„ ์žˆ๋‹ค.
์กฐ์ธ ์นผ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ํ•ด์‰ฌํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์„œ๋กœ ๋™์ผํ•œ ํ•ด์‰ฌ๊ฐ’์„ ๊ฐ–๋Š” ๊ฒƒ๋“ค ์‚ฌ์ด์—์„œ ์‹ค์ œ ๊ฐ’์ด ๊ฐ™์€์ง€๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ์กฐ์ธ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

NL join์˜ ๋žœ๋ค์•ก์„ธ์Šค ๋ฌธ์ œ์ ๊ณผ Sort Merge Join์˜ ์ •๋ ฌ์ž‘์—… ๋ถ€๋‹ด ํ•ด๊ฒฐ์˜ ๋Œ€์•ˆ์œผ๋กœ ๋“ฑ์žฅํ–ˆ๋‹ค.


CPU์—ฐ์‚ฐ์„ ๋งŽ์ดํ•˜์—ฌ ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ•„์š”ํ•˜๋‹ค.
์กฐ์ธ ์ œํ•œ   ๋™๋“ฑ์กฐ์ธ, ๋น„๋™๋“ฑ์กฐ์ธ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ ๋™๋“ฑ์กฐ์ธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฐ์ดํ„ฐ ์ฝ๋Š”๋ฐฉ๋ฒ• ๋žœ๋ค ์•ก์„ธ์Šค ๋ฐฉ์‹ ์Šค์บ” ๋ฐฉ์‹  
์ฒ˜๋ฆฌ๋ฒ”์œ„ ์ข์€ ๋ฒ”์œ„๊ฐ€ ์œ ๋ฆฌํ•˜๋‹ค. NL ์กฐ์ธ์—์„œ ๋ถ€๋‹ด๋˜๋˜ ๋„’์€ ๋ฒ”์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ด์šฉ๋œ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ ์ •๋ ฌ์ด ๋งŽ์•„์ง€๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค) ์ •๋ ฌ์ž‘์—…์ด ์—†์–ด ์ •๋ ฌ์ด ๋ถ€๋‹ด๋˜๋Š” ๋Œ€๋Ÿ‰ ๋ฐฐ์น˜์ž‘์—…์— ์œ ๋ฆฌํ•˜๋‹ค.
๋™์ž‘๋ฐฉ๋ฒ• - ์„ ํ–‰ ํ…Œ์ด๋ธ”์—์„œ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰์„ ์ฐพ์Œ


- ์„ ํ–‰ ํ…Œ์ด๋ธ”์˜ ์กฐ์ธ ํ‚ค ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ํ›„ํ–‰ ํ…Œ์ด๋ธ”์—์„œ ์กฐ์ธ ์ˆ˜ํ–‰


- ์„ ํ–‰ ํ…Œ์ด๋ธ”์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ํ–‰์— ๋Œ€ํ•ด 1๋ฒˆ ์ž‘์—… ๋ฐ˜๋ณต ์ˆ˜ํ–‰


- ์„ ํ–‰ ํ…Œ์ด๋ธ” ์กฐ์ธ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰


- ํ›„ํ–‰ ํ…Œ์ด๋ธ” ์กฐ์ธ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰


- ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉํ•˜์—ฌ ์กฐ์ธ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์กฐ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด ์ถ”์ถœ๋ฒ„ํผ์— ๋„ฃ์Œ


- ์„ ํ–‰ ํ…Œ์ด๋ธ”์—์„œ ์กฐ์ธ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์‰ฌ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ํ•ด์‰ฌ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ

- ํ›„ํ–‰ ํ…Œ์ด๋ธ”์—์„œ ์กฐ์ธ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์‰ฌ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฒ„ํ‚ท์„ ์ฐพ์Œ

- ์กฐ์ธ์— ์„ฑ๊ณตํ•˜๋ฉด ์ถ”์ถœ๋ฒ„ํผ์— ๋„ฃ์Œ

- ํ›„ํ–‰ ํ…Œ์ด๋ธ”์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ํ–‰์— ๋Œ€ํ•ด์„œ ๋ฐ˜๋ณต ์ˆ˜ํ–‰

 

 

 

 

#SQLD #์˜ตํ‹ฐ๋งˆ์ด์ € #Optimizer #์‹คํ–‰๊ณ„ํš #์ธ๋ฑ์Šค #B-Tree์ธ๋ฑ์Šค #ํด๋Ÿฌ์Šคํ„ฐ๋“œ์ธ๋ฑ์Šค #๋…ผํด๋Ÿฌ์Šคํ„ฐ๋“œ์ธ๋ฑ์Šค #ํ…Œ์ด๋ธ”์Šค์บ” #FullTableScan #IndexScan #JOIN๊ธฐ๋ฒ• #NestedLoopJoin #SortMergeJoin #HashJoin

๋ฐ˜์‘ํ˜•
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ํŠธ์œ„ํ„ฐ ๊ณต์œ ํ•˜๊ธฐ
  • ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌ์Šค ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ