๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ORACLE/DB

[Oracle] ์˜ค๋ผํด INDEX ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์›๋ฆฌ ์žฅ์  ๋‹จ์  :: ๋งˆ์ด์ž๋ชฝ

by ๐ŸŒปโ™š 2020. 3. 25.

 INDEX๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์†๋„์˜ ํ–ฅ์ƒ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. INDEX ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋ฉด FULL SCAN์—์„œ ๋ชจ๋“  ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ROOT - BRANCH - LEAF - DATA BLOCK์ด 4๋ฒˆ์˜ IO๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ 100๊ฑด์ด๋“  100๋งŒ๊ฑด์ด๋“  ์†๋„์ฐจ์ด๋Š” ๋งŽ์ด ์•ˆ๋‚œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

INDEX๋ž€?

 

๋ชจ๋“  ํ…Œ์ด๋ธ”์—๋Š” ROWID๋ผ๋Š” ์นผ๋Ÿผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ROWID = FILE ๋ฒˆํ˜ธ + BLOCK ๋ฒˆํ˜ธ + ROW๋ฒˆํ˜ธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. "7๋ฒˆํŒŒ์ผ์— 132๋ฒˆ ๋ธ”๋ก์— 3๋ฒˆ์งธ" ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. INDEX๋Š” ์ด๋Ÿฐ ROWID๋ฅผ ํ†ตํ•ด DATA BLOCK์— ์ ‘๊ทผ ํ•ฉ๋‹ˆ๋‹ค. INDEX๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ฃผ์†Œ์ฒด๊ณ„๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

 

 

INDEX๋Š” ROOT, BRANCH, LEAF๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ผํด ์„œ๋ฒ„์—์„œ FULL SCAN๋ณด๋‹ค INDEX SCAN์ด ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ํŒ๋‹จ ๋˜์—ˆ์„ ๋•Œ ์ƒ์„ฑ๋œ INDEX์˜ ROOT ๋ถ€ํ„ฐ ์ฐพ์Šต๋‹ˆ๋‹ค. ROOT์—๋Š” BRANCH ๋ธ”๋Ÿญ์˜ ์‹œ์ž‘์ ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๊ฐ€ ์–ด๋Š BRANCH์— ์œ„์น˜ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. BRANCH LEVEL์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ LEAF ๋ธ”๋Ÿญ์— ๋Œ€ํ•œ ์‹œ์ž‘์  ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด ์–ด๋Š LEAF์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ LEAF์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ROWID๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐพ์•˜์„๋•Œ BLOCK์˜ ROWID๋ฅผ ์•Œ์•„๋ƒˆ์œผ๋‹ˆ, ๋ฐ”๋กœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋กœ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ์–ด ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

INDEX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ๋น ๋ฅธ๊ฐ€?

 

๊ผญ ๊ทธ๋Ÿฐ๊ฒƒ ๋งŒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ƒํ™ฉ๊ณผ ์–ด๋–ค ์ปฌ๋Ÿผ์— INDEX๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ์–ด์ฉ”๋•Œ๋Š” FULL SCAN์ด ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง๊ด€์ ์ธ ์˜ˆ์‹œ๋ฅผ ๋“ค์ž๋ฉด 1๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํ…Œ์ด๋ธ”๊ณผ 100๋งŒ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. 100๋งŒ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํ…Œ์ด๋ธ”์ด๋ผ๋ฉด FULL SCAN๋ณด๋‹ค๋Š” INDEX SCAN์ด ์œ ๋ฆฌํ•˜๊ฒ ์ง€๋งŒ, 1๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํ…Œ์ด๋ธ”์€ ๊ตณ์ด INDEX SCAN ์—†์ด FULL SCAN์ด ๋น ๋ฅผ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. 

 

๊ทธ์™ธ์— ์ฝ๋Š” ๋ธ”๋ก์˜ ๊ฐฏ์ˆ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, IOํ•˜๋Š” ํšŸ์ˆ˜๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. INDEX SCAN ํ•œ ๋ธ”๋Ÿญ์”ฉ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, IO์˜ ๋‹จ์œ„๊ฐ€ 1๋ธ”๋Ÿญ์ด ๋ฉ๋‹ˆ๋‹ค. FULL SCAN์˜ ๊ฒฝ์šฐ ๋ชจ๋‘ ๋‹ค ์ฝ์–ด์•ผํ•˜์ง€๋งŒ DB_FILE_MULTIBLOCK_READ_COUNT ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์„ค์ •์— ๋”ฐ๋ผ ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ธ”๋Ÿญ์„ ์ฝ์–ด INDEX SCAN๋ณด๋‹ค ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ค๋ผํด ์„œ๋ฒ„์—์„œ๋Š” FULL SCAN์„ ํ• ์ง€ INDEX SCAN์„ ํ• ์ง€ ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๋กœ ๋น„๊ตํ•˜์—ฌ ์„ฑ๋Šฅ์ด ๋” ์ข‹๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ SCAN ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์–ด์ฐจํ”ผ ์˜ค๋ผํด ์„œ๋ฒ„๊ฐ€ ํŒ๋‹จํ•ด์ฃผ๋‹ˆ๊นŒ ๋ชจ๋“  ์ปฌ๋Ÿผ์— INDEX๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š”๊ฒŒ ์œ ๋ฆฌํ•œ๊ฑฐ ์•„๋‹Œ๊ฐ€์š”?

 

 

๋ชจ๋“  ์ปฌ๋Ÿผ์— INDEX๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์„œ ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋ฉด ์ข‹๊ฒ ์ง€๋งŒ... INDEX๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š”๋ฐ๋Š” ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์†๋„ ํ–ฅ์ƒ์— ๋น„ํ•ด ๋‹จ์ ๋“ค์˜ COST๋ฅผ ๋น„๊ตํ•ด์„œ ์‚ฌ์šฉํ• ์ง€ ๋ง์ง€๋ฅผ ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

INDEX๋Š” SELECT ๊ตฌ๋ฌธ์—์„œ๋Š” ํ™•์‹คํžˆ ์ข‹๊ณ  ๋น ๋ฆ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ INSERT, UPDATE, DELETE ์ž‘์—…์„ ํ• ๋•Œ๋Š” INDEX์— ๋Œ€ํ•œ ์ˆ˜์ •๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. INDEX๊ฐ€ ์—†๋”๋ผ๋ฉด ๊ทธ๋ƒฅ ์ž‘์—…์„ ํ•˜๋ฉด ๋˜์ง€๋งŒ, INDEX๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์˜ค๋ฆ„์ฐจ์ˆœ๋˜์–ด ์žˆ๋Š” INDEX์— ์ƒˆ๋กœ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งž์ถฐ ๋‹ค์‹œ ์ˆ˜์ •์„ ํ•ฉ๋‹ˆ๋‹ค.

 

INDEX๋Š” ์ด๋Ÿฐ ์ €ํ•˜๋˜๋Š” ์„ฑ๋Šฅ ๋ณด๋‹ค SELECT๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œ์ผœ์ฃผ๋Š” ํผํฌ๋จผ์Šค๊ฐ€ ๋” ๋†’๊ฒŒ ํ‰๊ฐ€๋˜์–ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

INDEX๋Š” ์–ธ์ œ ์‚ฌ์šฉ ํ• ๊นŒ์š”?

 

1. ๊ตฌ๋ณ„๋˜๋Š” ๊ฐ’์ด ๋งŽ์€ ์นผ๋Ÿผ

PRIMARY KEY๋กœ ์ง€์ •๋˜๋Š” ์นผ๋Ÿผ์—๋Š” UNIQUEํ•œ INDEX๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ํ•˜๋ ค๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ ์œ ํ•œ ๊ฐ’์ด๋ผ๋ฉด, INDEX ๊ตฌ์กฐ ๋‚ด์—์„œ๋„ ์ค‘๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ ํ™•์ธ ํ•„์š”์—†์ด ๊ฐ€์žฅ ์ตœ์ ํ™” ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

 

2. WHERE์ ˆ์—์„œ ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ์นผ๋Ÿผ

WHERE์ ˆ์—์„œ ์‚ฌ์šฉ์ด ์•ˆ๋œ๋‹ค๋ฉด ๊ตณ์ด INDEX๋ฅผ ๋งŒ๋“ค์–ด์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค.  STORAGE๋งŒ ์ฐจ์ง€ํ•˜๊ณ  ์‚ฌ์šฉ๋„ ์•ˆํ•œ๋‹ค๋ฉด ์—†์• ์ฃผ๋Š”๊ฒŒ ๋„์›€์ž…๋‹ˆ๋‹ค. ์ค‘๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ์ž์ฃผ WHERE์ ˆ์˜ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์นผ๋Ÿผ์ด๋ผ๋ฉด INDEX SCAN์ด ํšจ์œจ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

3. ํฐ ํ…Œ์ด๋ธ”์—์„œ ์ ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ

3๋ฒˆ์งธ๋Š” ํšŒ์‚ฌ์˜ ์žฌ์ง์ƒํƒœ๋ฅผ๋‘๊ณ  ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์—๋Š” ์žฌ์ง ์ƒํƒœ์— ๋Œ€ํ•œ ์นผ๋Ÿผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์žฌ์ง์ด 90% ์ด์ƒ์„ ์ฐจ์ง€ํ•˜๊ณ , ๋‚˜๋จธ์ง€ ์ƒํƒœ๊ฐ€ ์–ผ๋งˆ ์•ˆ๋˜๋Š” ๋น„์ค‘์„ ์ฐจ์ง€ํ–ˆ์„๋•Œ INDEX์—๋Š” NULL๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค๋Š” ํŠน์ง•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. INDEX์—๋Š” NULL๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์žฌ์ง์ƒํƒœ์— INDEX ์นผ๋Ÿผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋น„์œจ์„ ๋งŽ์ด ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” "์žฌ์ง"์„ NULL๋กœ INSERTํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ƒํƒœ๋Š” ๋”ฐ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด, FULL SCAN์œผ๋กœ ๊ฒ€์ƒ‰ ํ–ˆ๋”๋ผ๋ฉด 100๊ฑด์„ ๋ชจ๋‘ ํƒ์ƒ‰ ํ–ˆ์–ด์•ผํ•˜๋Š”๋ฐ INDEX๋ฅผ ํ™œ์šฉํ•ด์„œ 5๊ฑด์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ  INDEX SCAN์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

INDEX ์œ ์ง€๋ณด์ˆ˜

์ง€๊ธˆ๊นŒ์ง€์˜ ๋‚ด์šฉ์œผ๋กœ ๋ดค์„ ๋•Œ, INDEX๋Š” ๋‹จ์  ๋ณด๋‹ค๋Š” ์žฅ์ ์ด ๋งŽ์€ ๊ฒƒ ๊ฐ™๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ข‹์€ ๋„๊ตฌ์ธ ๋งŒํผ, ์œ ์ง€๋ณด์ˆ˜๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

 

์ƒํ’ˆ๊ตฌ๋งค, ์ฃผ์‹๊ฑฐ๋ž˜, ๊ทผํ‡ดํ™•์ธ ๋“ฑ INSERT ์ž‘์—…์ด ์ง€์†์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ํ…Œ์ด๋ธ”์€ INDEX์˜ ํฌ๊ธฐ๋„ ๊ณ„์† ์ปค์ง€๊ฒŒ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ INDEX์˜ ํŠน์„ฑ์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ INSERT ๋ ๋•Œ ํ…Œ์ด๋ธ”๊ณผ ๋‹ฌ๋ฆฌ  ์ž๋ฆฌ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋“ค์–ด๊ฐˆ BLOCK์— ์ด๋ฏธ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๊ณ  ๊ฝ‰์ฐจ ์žˆ๋Š”๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜๋ผ์„œ ์ƒˆ๋กœ์šด LEAF ๋ธ”๋ก์— ์ ˆ๋ฐ˜์„ ๋„ฃ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•œ๊ฑด์ด ์•„๋‹Œ ์ ˆ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ•  ํ•˜๋Š” ์ด์œ ๋Š” ์•ž์œผ๋กœ ๋” ๋“ค์–ด์˜ฌ ๋ฐ์ดํ„ฐ์˜ ์ž๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๋งˆ๋ จํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ์ž‘์—…์ด ๊ณ„์† ์ง„ํ–‰๋˜๋‹ค๋ณด๋ฉด LEAF BLOCK์˜ ์ˆ˜๋Š” ์ˆ˜๋„ ์—†์ด ๋งŽ์•„์ง€๊ณ  ๊ณ„์† ๋ถ„ํ• ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ธ๋Š”๋ฐ ์•„๋ฌด ๋ฐ์ดํ„ฐ๋„ ์—†๋Š” LEAF BLOCK์ด ์ƒ๊ฒจ๋‚  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด DBA๊ฐ€ ์ธ๋ฑ์Šค๋ฅผ ์žฌ๊ตฌ์„ฑํ•ด์ฃผ๋Š” ํŠœ๋‹์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค.

 

๋Œ“๊ธ€