๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’กCS/Database

[Database] ์ธ๋ฑ์Šค (Index)

by hyeon-z 2023. 6. 16.

 

์ธ๋ฑ์Šค๋ž€?

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ (ํŠน์ • ์ปฌ๋Ÿผ์„ ๋ณต์‚ฌํ•ด์„œ ์ •๋ ฌํ•ด ๋‘”๋‹ค!)

 

ex) ์šฐ๋ฆฌ๊ฐ€ ์ฑ…์—์„œ ์›ํ•˜๋Š” ๋‚ด์šฉ์„ ์ฐพ๋Š”๋‹ค๊ณ  ํ•˜๋ฉด, ์ฑ…์˜ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์€ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฑ…์˜ ์ €์ž๋“ค์€ ๋ณดํ†ต ์ฑ…์˜ ๋งจ ๋’ค์— ์ƒ‰์ธ์„ ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ index๋Š” ์ฑ…์˜ ์ƒ‰์ธ๊ณผ ๊ฐ™๋‹ค.

 

https://coding-factory.tistory.com/746

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋„ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.


์ธ๋ฑ์Šค์˜ ๊ด€๋ฆฌ

 

DBMS๋Š” index๋ฅผ ํ•ญ์ƒ ์ตœ์‹ ์˜ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ด์•ผ ์›ํ•˜๋Š” ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค๊ฐ€ ์ ์šฉ๋œ ์ปฌ๋Ÿผ์— INSERT, UPDATE, DELETE๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค๋ฉด, ๊ฐ๊ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฉฐ ๊ทธ์— ๋”ฐ๋ฅธ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

INSERT: ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ

DELETE: ์‚ญ์ œํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•จ

UPDATE: ๊ธฐ์กด์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฐฑ์‹ ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•จ


์ธ๋ฑ์Šค์˜ ์žฅ๋‹จ์ 

์žฅ์ 

 

๐Ÿ‘† ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋Š” ์†๋„์™€ ๊ทธ์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

Where์ ˆ์— ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ฐพ์•„๋‚ผ ๋•Œ ๋ ˆ์ฝ”๋“œ์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋‹ค ์ฝ์–ด์„œ ๊ฒ€์ƒ‰ ์กฐ๊ฑด๊ณผ ๋งž๋Š”์ง€ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค. => ํ’€ ํ…Œ์ด๋ธ” ์Šค์บ” (Full Table Scan)

์ธ๋ฑ์Šค ํ…Œ์ด๋ธ”์€ ๋ฐ์ดํ„ฐ๋“ค์ด ์ •๋ ฌ๋˜์–ด ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์กฐ๊ฑด (Where)์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ‘† ์ „๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์ 

 

๐Ÿ‘† ์ธ๋ฑ์Šค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.

 

์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•œ๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ํฌ๊ฑฐ๋‚˜ ๋งŽ์€ ์ˆ˜์˜ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ „์ฒด ๋””์Šคํฌ ๊ณต๊ฐ„ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํฐ ์ธ๋ฑ์Šค๋Š” ๋””์Šคํฌ I/O ๋น„์šฉ์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

 

๐Ÿ‘† ์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ๋  ๋•Œ ์ธ๋ฑ์Šค๋„ ํ•จ๊ป˜ ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•œ๋‹ค.

ํŠนํžˆ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ, ์ธ๋ฑ์Šค ์—…๋ฐ์ดํŠธ์— ์˜ํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ‘† ์ธ๋ฑ์Šค์˜ ์œ ์ง€ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ธ๋ฑ์Šค ์œ ์ง€ ๋น„์šฉ์ด ์ƒ๋‹นํžˆ ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.


์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒฝ์šฐ

 

ํŠน์ • ์ปฌ๋Ÿผ์„ ๊ฒ€์ƒ‰์กฐ๊ฑด์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

ex) ์ฃผ๋ฌธ ๋ฒˆํ˜ธ๋กœ ์ฃผ๋ฌธ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ, ์ฃผ๋ฌธ ๋ฒˆํ˜ธ ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ํ•ด๋‹น ์ฃผ๋ฌธ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ •๋ ฌ ์—ฐ์‚ฐ์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ (Order By)

์ •๋ ฌ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ •๋ ฌ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค.

ex) ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๊ฒฝ์šฐ, ์ด๋ฆ„ ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ •๋ ฌ ์ž‘์—…์ด ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

 


์ธ๋ฑ์Šค์˜ ์ž๋ฃŒ๊ตฌ์กฐ

 

B+ Tree

 

DB์˜ ์ธ๋ฑ์Šค๋ฅผ ์œ„ํ•ด ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ B-Tree๋ฅผ ๊ฐœ์„ ์‹œํ‚จ ์ž๋ฃŒ๊ตฌ์กฐ

B+Tree๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ(Value)๋ฅผ ์ €์žฅํ–ˆ๋˜ BTree์™€ ๋‹ค๋ฅธ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

 

- ๋ฆฌํ”„๋…ธ๋“œ(๋ฐ์ดํ„ฐ๋…ธ๋“œ)๋งŒ ์ธ๋ฑ์Šค์™€ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ(Value)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‚˜๋จธ์ง€ ๋…ธ๋“œ(์ธ๋ฑ์Šค๋…ธ๋“œ)๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์ธ๋ฑ์Šค(Key)๋งŒ์„ ๊ฐ–๋Š”๋‹ค.

- ๋ฆฌํ”„๋…ธ๋“œ๋“ค์€ LinkedList๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

- ๋ฐ์ดํ„ฐ ๋…ธ๋“œ ํฌ๊ธฐ๋Š” ์ธ๋ฑ์Šค ๋…ธ๋“œ์˜ ํฌ๊ธฐ์™€ ๊ฐ™์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

- Root Node์—์„œ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•œ ํ›„ ๊ทธ์— ๋งž๋Š” ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” Leaf Node์— ๋„์ฐฉํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์€ ๋ถ€๋“ฑํ˜ธ๋ฅผ ์ด์šฉํ•œ ์ˆœ์ฐจ ๊ฒ€์ƒ‰ ์—ฐ์‚ฐ์ด ์ž์ฃผ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ BTree์˜ ๋ฆฌํ”„๋…ธ๋“œ๋“ค์„ LinkedList๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ˆœ์ฐจ๊ฒ€์ƒ‰์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ๋“ฑ BTree๋ฅผ ์ธ๋ฑ์Šค์— ๋งž๊ฒŒ ์ตœ์ ํ™”ํ•˜์˜€๋‹ค. (๋ฌผ๋ก  Best Case์— ๋Œ€ํ•ด ๋ฆฌํ”„๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€์ง€ ์•Š์•„๋„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” BTree์— ๋น„ํ•ด ๋ฌด์กฐ๊ฑด ๋ฆฌํ”„๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ๋„ ์žˆ๋‹ค.)

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋น„๋ก B+Tree๋Š” O(log2n) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–์ง€๋งŒ ํ•ด์‹œํ…Œ์ด๋ธ”๋ณด๋‹ค ์ธ๋ฑ์‹ฑ์— ๋”์šฑ ์ ํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋˜์—ˆ๋‹ค.

 

 

 

Reference

[์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด๋Š” B+Tree

[Database] ์ธ๋ฑ์Šค(index)๋ž€?

์ธ๋ฑ์Šค(INDEX)์˜ ํ•„์š”์„ฑ

'๐Ÿ’กCS > Database' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Database] ํŠธ๋žœ์ ์…˜ (Transaction)  (0) 2023.06.16
[Database] ์ •๊ทœํ™”(Normalization)  (0) 2023.06.16
์ปค๋„ฅ์…˜ ํ’€(Connection Pool)์ด๋ž€?  (0) 2023.04.05

๋Œ“๊ธ€