๐Ÿ’Œ DB Indexing์ด๋ž€? ๐Ÿ’Œ

On a regular basisยท2021๋…„ 8์›” 11์ผ
0
post-thumbnail

๐Ÿ’Œ DB Indexing์ด๋ž€?

RDBMS์—์„œ ๊ฒ€์ƒ‰์†๋„๋ฅผ ๋†’์ด๊ธฐ ์‚ฌ์šฉํ•˜๋Š” ํ•˜๋‚˜์˜ ๊ธฐ์ˆ .
INDEX๋Š” ์ƒ‰์ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•จ. ํ•ด๋‹น TABLE์˜ ์ปฌ๋Ÿผ์„ ์ƒ‰์ธํ™”(๋”ฐ๋กœ ํŒŒ์ผ๋กœ ์ €์žฅ)ํ•˜์—ฌ ๊ฒ€์ƒ‰์‹œ ํ•ด๋‹น TABLE์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ full scan ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์ƒ‰์ธํ™” ๋˜์–ด์žˆ๋Š” INDEX ํŒŒ์ผ์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๊ฒ€์ƒ‰์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ!

๐Ÿ’Œ Index์˜ ์ข…๋ฅ˜?

  1. B(Balanced)+tree Index
  2. Bitmap Index
  3. IOT Index
  4. Clustered Index
  • ์ฃผ๋กœ B+tree ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ๋จ!

๐Ÿ’Œ B+tree ๊ตฌ์กฐ๊ฐ€ ๋ญ˜๊นŒ.......?^^


๐Ÿ“ฉ B+Tree๊ตฌ์„ฑ

  • ๋ฃจํŠธ๋…ธ๋“œ: ๊ฒฝ๋กœ์˜ ์ถœ๋ฐœ์  ๋…ธ๋“œ
  • ๋…ผ๋ฆฌ๋…ธ๋“œ: ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฒฝ๋กœ ์—ญํ• ์„ ํ•˜๋Š” ๋…ธ๋“œ
  • ๋ฆฌํ”„๋…ธ๋“œ: ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๋…ธ๋“œ
  • B+Tree๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์ž์‹ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์–ด ํƒ์ƒ‰์— ์žˆ์–ด ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์–ด๋–ค ๋ฆฌํ”„๋…ธ๋“œ์— ์ด๋ฅด๋Š” ํ•œ ๊ฐœ์˜ ๊ฒฝ๋กœ๋งŒ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์— ์žˆ์–ด ๋งค์šฐ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๐Ÿ’Œ ์™œ ์‚ฌ์šฉํ•ด์•ผํ•˜์ง€?

-> ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์—ฌ์ฃผ๋‹ˆ๊นŒ! ์šฐ๋ฆฌ๊ฐ€ ์ฑ…์—์„œ ์›ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ๋•Œ์—๋„ ์ƒ‰์ธ ๋ชฉ๋ก์„ ํ™•์ธํ•˜๋Š” ์ด์œ ๋ž‘ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด ๋จ. ๊ฒ€์ƒ‰์†๋„๋ฅผ ๋†’์—ฌ์ฃผ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ด€๋ฆฌ, ๊ฒ€์ƒ‰ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฅผ! ๋„˜์ข‹์ง€...๐ŸŽ€

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„ ํ…Œ์ด๋ธ”์˜ Physics๊ฐ’์„ ์กฐํšŒํ•œ๋‹ค๊ณ  ํ•ด๋ณด์žฅ!
  • select ์ ˆ์„ ํ™œ์šฉํ•ด์„œ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ or ์–ด๋Š ์œ„์น˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— Table Full scan์„ ์ง„ํ–‰ํ•  ๊ฒƒ์ž„.
  • ๊ทผ๋ฐ ๋งŒ์•ฝ์— ์ˆ˜์‹ญ๋งŒ๊ฐœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š”๋ฐ, ๊ฒ€์ƒ‰์„ ์ž์ฃผ ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ๊ณ„์† ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์ง„์งœ ์งœ์ฆ๋‚˜๊ฒŒ์ฐŒ....
  • ๊ทธ๋‹ˆ๊นŒ ์œ„์™€ ๊ฐ™์ด ์ธ๋ฑ์Šค๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•ด์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋งŒ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋จ์œผ๋กœ์จ ์„ฑ๋Šฅํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ด์•ผ...๐ŸŽˆ

๐Ÿ’Œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๋ฐ?

  1. ํ•ด๋‹น ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ์‹œ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์„ ์ง€์ •
  2. ์ƒ์„ฑ ํ›„ ์ธ๋ฑ์Šค ์กฐํšŒ ์‹œ, WHERE ์ ˆ์ด ํฌํ•จ๋œ ์ฟผ๋ฆฌ๋กœ ์กฐํšŒ
  3. ์ธ๋ฑ์Šค๋กœ ์ €์žฅ๋œ Key-Value๊ฐ’์„ ์ฐธ์กฐํ•ด์„œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ

๐Ÿ’Œ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊ฒŒ!

์˜ˆ์‹œ)

  • ์‚ฌ์› ํ…Œ์ด๋ธ”์— ์ด 50๋ช…์ด ์žˆ๊ณ , ๋‚จ์ž 25๋ช…, ์—ฌ์ž 25๋ช…
    ์—ฌ์ž ์ค‘ ์ด๋ฆ„์ด '์œ ๊ด€์ˆœ'์ธ ์‚ฌ๋žŒ์ด 2๋ช…
    ์‚ฌ์› ํ…Œ์ด๋ธ”์—์„œ ์„ฑ๋ณ„์ด '์—ฌ์ž' ์ด๊ณ  ์ด๋ฆ„์ด '์œ ๊ด€์ˆœ'์ธ ์‚ฌ๋žŒ์„ ์ฐพ์„ ๋•Œ :
    SQL > SELECT ์ด๋ฆ„, ์„ฑ๋ณ„ FROM ์‚ฌ์› WHERE ์„ฑ๋ณ„ = '์—ฌ์ž' AND ์ด๋ฆ„ = '์œ ๊ด€์ˆœ';
  • ๊ฒฐํ•ฉ ์ธ๋ฑ์Šค ์ƒ์„ฑ ๊ตฌ๋ฌธ ์˜ˆ (์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ˆ์‹œ) :
CREATE UNIQUE INDEX [์ธ๋ฑ์Šค๋ช…]
ON [ํ…Œ์ด๋ธ”๋ช…]([์ปฌ๋Ÿผ๋ช…1][์ •๋ ฌ๊ธฐ์ค€], [์ปฌ๋Ÿผ๋ช…2][์ •๋ ฌ๊ธฐ์ค€], ...)
SQL > **CREATE UNIQUE INDEX** idx_์‚ฌ์›_์„ฑ๋ณ„_์ด๋ฆ„ 2 **ON** ์‚ฌ์›(์„ฑ๋ณ„,์ด๋ฆ„);
  • ๊ฒฐํ•ฉ ์ธ๋ฑ์Šค ์ƒ์„ฑ์‹œ ์ปฌ๋Ÿผ์˜ ๋ฐฐ์น˜ ์ˆœ์„œ
    case 1 : ON ์‚ฌ์›(์„ฑ๋ณ„, ์ด๋ฆ„)
    50 ๋ช… -> ์—ฌ์ž -> 25๋ช… -> ์œ ๊ด€์ˆœ -> 2๋ช…
    50 => 25ํšŒ ๊ฒ€์‚ฌ
    case 2 : ON ์‚ฌ์›(์ด๋ฆ„, ์„ฑ๋ณ„)
    50๋ช… -> ์œ ๊ด€์ˆœ -> 2๋ช… -> ์—ฌ์ž -> 2๋ช…
    50 => 2ํšŒ ๊ฒ€์‚ฌ
    => ๊ฐ™์€ ํ…Œ์ด๋ธ”์— ๊ฐ™์€ SQL์ด์ง€๋งŒ ๊ฒฐํ•ฉ ์ธ๋ฑ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•˜๋Š”๊ฐ€์— ๋”ฐ๋ผ ์†๋„๋‚˜ ๊ฒ€์‚ฌ ํšŸ์ˆ˜๊ฐ€ ์™„์ „ํžˆ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. (์‹ ์ค‘ํžˆ ์ƒ์„ฑ...)

๐Ÿ’Œ ๊ทธ๋Ÿผ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ?

  1. ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ๊ณ  ๊ฒ€์ƒ‰์ด ๋ณ€๊ฒฝ๋ณด๋‹ค ์žฆ์€ ๊ฒฝ์šฐ(๊ฒ€์ƒ‰>>>>>๋ณ€๊ฒฝ)
    ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์—์„œ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚˜๊ฒŒ ๋˜๋ฉด ์ธ๋ฑ์Šค์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•ด๋‹น ๋™์ž‘๋“ค์ด ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Œ.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ์‡ผํ•‘๋ชฐ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์กด์žฌํ• ๋•Œ ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ƒํ’ˆ๋“ค์„ ์กฐํšŒํ• ๋•Œ ์ด๋Ÿฌํ•œ ์ธ๋ฑ์Šค ๊ธฐ๋Šฅ์„ ์ž˜ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ํฐ ํšจ์œจ์„ ๋ฐœํœ˜ํ•˜๊ฒŒ ๋˜์ง€๋งŒ, ์ธ์Šคํƒ€๊ทธ๋žจ๊ฐ™์€ ์†Œ์…œ ์„œ๋น„์Šค๋“ค์€ ๋Š์ž„์—†์ด ๊ฒŒ์‹œ๊ธ€์ด ์ž‘์„ฑ๋˜๊ณ  ์ˆ˜์ •, ์‚ญ์ œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ์ธ๋ฑ์‹ฑ์„ ํ•˜๊ฒŒ๋˜๋ฉด ์—„์ฒญ๋‚œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์—
  2. ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ.
  3. ์ฃผ๋กœ ๊ฒ€์ƒ‰ ๋ฐ ์กฐํšŒ๋ฅผ ํ•  ๋•Œ.

๐Ÿ’Œ Indexing์˜ ์žฅ์ 

  1. ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ Input, output ์ž‘์—…์ด ๋งŽ์ด ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค ๊ตฌ์กฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ–‰์„ ์ด์ „๋งŒํผ ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์—†์Œ.
  2. ์œ ์ €์—๊ฒŒ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰ํ•ด ๋” ๋น ๋ฅด๊ฒŒ ์ œ๊ณต.
  3. ํ…Œ์ด๋ธ” ํ–‰์— ์—ฐ๊ฒฐ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ํ–‰ ID๋ฅผ ์ธ๋ฑ์Šค์— ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ด๋ธ” ๊ณต๊ฐ„์ด ์ค„์–ด๋“ฆ.
  4. ๊ธฐ๋ณธ ํ‚ค์˜ ๊ฐ’์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ’Œ Indexing์˜ ๋‹จ์ 

  1. ์ธ๋ฑ์‹ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ์œ ๋‹ˆํฌํ•œ ๊ฐ’์„ ์ง€๋‹Œ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ํ•„์š”ํ•จ.
  2. ์ธ๋ฑ์Šค ๋œ ๋ฐ์ดํ„ฐ์—์„œ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ.
  3. ์ธ๋ฑ์Šค๋กœ ์ •๋ฆฌ๋œ ํ…Œ์ด๋ธ”์„ ๋ถ„ํ•  ํ•  ์ˆ˜ ์—†์Œ.
  4. SQL ์ธ๋ฑ์‹ฑ์€ CRUD ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ๊ฐ์†Œ์‹œํ‚ด.

๐Ÿ’Œ ์ถœ์ฒ˜1: https://velog.io/@bsjp400/Database-DB-%EC%9D%B8%EB%8D%B1%EC%8B%B1Indexing%EC%9D%B4%EB%9E%80

๐Ÿ’Œ ์ถœ์ฒ˜2: https://lalwr.blogspot.com/2016/02/db-index.html

profile
๊ฐœ๋ฐœ ๊ธฐ๋ก

0๊ฐœ์˜ ๋Œ“๊ธ€