์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค

Eager To Learn ๐ŸŒŒ

๊ฐœ๋ฐœ์„œ์ /์นœ์ ˆํ•œ SQL ํŠœ๋‹

NL ์กฐ์ธ์˜ ์›๋ฆฌ

2023. 11. 17. 16:13

์กฐ์‹œํ˜•๋‹˜์˜ ์นœ์ ˆํ•œ SQL ํŠœ๋‹์„ ์ฝ๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.


NL ์กฐ์ธ์€ Nested Loop ์กฐ์ธ์˜ ์•ฝ์ž๋กœ ์ค‘์ฒฉ ๋ฃจํ”„ ๋ฌธ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์กฐ์ธ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

 

 

์œ„ ๋‘ ํ…Œ์ด๋ธ”๋ฅผ ์‚ฌ์› ๋ฒˆํ˜ธ๋กœ ์กฐ์ธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹์œผ๋กœ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

for(int i=0;i<์‚ฌ์›.size();i++){
	for(int j=0;j<๊ณ ๊ฐ.size();j++){
    	if(์‚ฌ์›[i].๋ฒˆํ˜ธ == ๊ณ ๊ฐ[j].๊ด€๋ฆฌ์‚ฌ์›๋ฒˆํ˜ธ){
        	// ์ฐพ์œผ๋ ค๋Š” ๋ ˆ์ฝ”๋“œ
        }
    }
}

 

์‚ฌ์› ํ…Œ์ด๋ธ”์˜ ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ ๊ฐ ํ…Œ์ด๋ธ” ์ „์ฒด ๋ ˆ์ฝ”๋“œ๋ฅผ ์ˆœํšŒํ•˜์—ฌ ๊ธฐ์ค€์ธ ์‚ฌ์›๋ฒˆํ˜ธ์™€ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ”๊นฅ์ชฝ ๋ฃจํ”„์— ํ•ด๋‹นํ•˜๋Š” ํ…Œ์ด๋ธ”์„ Outer Table์ด๋ผ ํ•˜๊ณ  ์•ˆ์ชฝ์— ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ Inner Table์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๐Ÿ’ก Outer์™€ Inner๋ฅผ ๊ตณ์ด ๋‚˜๋ˆˆ ์ด์œ ๋Š” ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ํฐ ์ฐจ์ด๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

Outer Table์— ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ๋Š” ํ’€์Šค์บ”์„ ํ•˜๋”๋ผ๊ณ  ํ•œ๋ฒˆ์— ๊ทธ์น˜์ง€๋งŒ, ๐Ÿšจ Inner Table์„ ํ’€์Šค์บ”ํ•˜๊ฒŒ ๋˜๋ฉด Outer Table์˜ ๋ ˆ์ฝ”๋“œ ์ˆ˜ ๋งŒํผ ํ’€์Šค์บ”์„ ํ•ด์•ผ๋œ๋‹ค.

 

 

 

๋น„ํšจ์œจ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ๋ก , ๋‘ ํ…Œ์ด๋ธ”์„ ํ’€์Šค์บ”ํ•ด์„œ ์ฐพ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ์ธ๋ฑ์Šค ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

์˜ˆ๋กœ, ์‚ฌ์› ํ…Œ์ด๋ธ”์„ ์ž…์‚ฌ์ผ์ž๋กœ ์ธ๋ฑ์Šค๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ  ๊ณ ๊ฐ ํ…Œ์ด๋ธ”์„ ๊ด€๋ฆฌ ์‚ฌ์› ๋ฒˆํ˜ธ๋กœ ์ธ๋ฑ์‹ฑ ๋˜์–ด ์žˆ๋‹ค๋ฉด

 

select * from ์‚ฌ์› e, ๊ณ ๊ฐ c
where e.์ž…์‚ฌ์ผ์ž >= '19960101' 
and c.๊ด€๋ฆฌ์‚ฌ์›๋ฒˆํ˜ธ = e.์‚ฌ์›๋ฒˆํ˜ธ

 

์œ„์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ ํ•  ๋•Œ

 

์ž…์‚ฌ ์ผ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์‚ฌ์›์˜ ์ธ๋ฑ์Šค ํ…Œ์ด๋ธ”์—์„œ ์ž…์‚ฌ์ผ์ž ์กฐ๊ฑด์— ๋งž๋Š” ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ 

 

ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ” ๋ธ”๋ก ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ…Œ์ด๋ธ” ๋ธ”๋ก์— ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ์•Œ์•„๋‚ด๊ณ 

 

์‚ฌ์›๋ฒˆํ˜ธ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ณ ๊ฐ์˜ ์ธ๋ฑ์Šค ํ…Œ์ด๋ธ”์—์„œ ์ด์ „์— ์ฐพ์€ ์‚ฌ์› ๋ฒˆํ˜ธ ์กฐ๊ฑด์— ๋งž๋Š” ์ธ๋ฑ์Šค ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„ ์ตœ์ข…์ ์œผ๋กœ ์‚ฌ์› ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

์ด 2๋ฒˆ์˜ ์ธ๋ฑ์Šค ํ…Œ์ด๋ธ”์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

 

๐Ÿšจ ๋งŒ์•ฝ, ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๊ณ ๊ฐ ํ…Œ์ด๋ธ”์„ ํ’€์Šค์บ”ํ•˜์—ฌ ์ฐพ์œผ๋ ค๋Š” ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๋งค์šฐ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

NL ์กฐ์ธ ํŠœ๋‹ํ•ด๋ณด๊ธฐ

SELECT * FROM ์‚ฌ์› e, ๊ณ ๊ฐ c
WHERE e.์ž…์‚ฌ์ผ์ž >= '19960101'
AND e.๋ถ€์„œ์ฝ”๋“œ = 'Z123'
AND c.๊ด€๋ฆฌ์‚ฌ์›๋ฒˆํ˜ธ = e.์‚ฌ์›๋ฒˆํ˜ธ
AND c. ์ตœ์ข…์ฃผ๋ฌธ๊ธˆ์•ก >= 20000

 

์œ„์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ ํ›„,

 

ROWS |  OPERATION
5    |NESTED LOOPS
3    |	TABLE ACCESS BY INDEX ROWID OF ์‚ฌ์›
2780 |    	INDEX RANGE SCAN OF ์‚ฌ์›_X1
5    |    TABLE ACCESS BY INDEX ROWID OF ๊ณ ๊ฐ
8    |    	INDEX RANGE SCAN OF ๊ณ ๊ฐ_X1

// ์‚ฌ์›_X1 = ์ž…์‚ฌ์ผ์ž
// ๊ณ ๊ฐ_X1 = ๊ด€๋ฆฌ์‚ฌ์›๋ฒˆํ˜ธ

 

์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ ํŠธ๋ ˆ์ด์Šค ๊ฒฐ๊ณผ๊ฐ€ ์œ„์™€ ๊ฐ™๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋ฌด์—‡์ด ๋ฌธ์ œ์ผ๊นŒ?

 

1๏ธโƒฃ ๋จผ์ €, ์ธ๋ฑ์Šค์ธ ์ž…์‚ฌ์ผ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ณ , ํ…Œ์ด๋ธ”์— ๋žœ๋ค ์—‘์„ธ์Šคํ•œ ํšŸ์ˆ˜๊ฐ€ 2780๋ฒˆ์ธ ๊ฒƒ์— ๋ฐ˜ํ•ด

 

์ตœ์ข…์ ์œผ๋กœ ๋ถ€์„œ ์ฝ”๋“œ๋กœ ๊ฑธ๋Ÿฌ์ง„ ๊ฒฐ๊ณผ๋Š” 3๊ฑด์— ๊ทธ์นœ๋‹ค. 

 

๋žœ๋ค I/O๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด [์ž…์‚ฌ์ผ์ž + ๋ถ€์„œ์ฝ”๋“œ] ๋กœ ๊ตฌ์„ฑ๋œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋žœ๋ค I/O๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

2๏ธโƒฃ ์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ์šด ์ธ๋ฑ์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค๊ณ  ๋๋‚  ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„์˜ ์ฒ˜๋ฆฌ ๊ฑด์ˆ˜๋ฅผ ํ™•์ธํ•ด๋ณด๊ณ , [์ž…์‚ฌ์ผ์ž + ๋ถ€์„œ์ฝ”๋“œ] ๋กœ ๊ตฌ์„ฑํ–ˆ์„๋•Œ์™€ [๋ถ€์„œ์ฝ”๋“œ + ์ž…์‚ฌ์ผ์ž] ๋กœ ๊ตฌ์„ฑํ–ˆ์„๋•Œ๋ฅผ ๋น„๊ตํ•ด๋ณด๊ณ  ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ๊ฐ–์ถ˜ ์ธ๋ฑ์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํŒ๋‹จํ•˜๊ณ  ๊ฒฐ์ •ํ•˜๋ฉด ๋” ์ข‹์€ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

    '๊ฐœ๋ฐœ์„œ์ /์นœ์ ˆํ•œ SQL ํŠœ๋‹' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • Where ์กฐ๊ฑด ์ ˆ์—์„œ Between ๊ณผ Like
    • Where ์กฐ๊ฑด ์ ˆ์—์„œ Between ๊ณผ in ์˜ ์ฐจ์ด
    • ๋ฐฐ์น˜ I/O์™€ ์ธ๋ฑ์Šค๋ฅผ ๋ฏฟ๊ณ  ์ฟผ๋ฆฌ์— ORDER BY๋ฅผ ์ƒ๋žตํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด์œ 
    • ์ธ๋ฑ์Šค ํŠœ๋‹
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”