๐Ÿ’กIndex๋ฅผ ํ•™์Šตํ•ด ๋ณด์ž

-ยท2022๋…„ 1์›” 17์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
9/12
post-thumbnail

Index

Index๋ž€?

  • ์ถ”๊ฐ€์ ์ธ ์“ฐ๊ธฐ ์ž‘์—…๊ณผ ์ €์žฅ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
  • ์ž์ฃผ ์กฐํšŒ๋˜๋Š” Column์— ๋Œ€ํ•œ Index Table์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด SELECT ๋ฌธ ์ˆ˜ํ–‰ ์‹œ Index Table์— ์žˆ๋Š” ๊ฐ’์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์กฐํšŒ
  • ๋งŒ์•ฝ Index๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์€ ์ปฌ๋Ÿผ์„ ์กฐํšŒํ•  ์‹œ. Full Scan์ด ์ˆ˜ํ–‰
  • ์ฃผ๋กœ B+tree๋กœ ๊ตฌ์„ฑ๋œ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉ

Index ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์ 

  • ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ๋น ๋ฅด๋‹ค
  • ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ, ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰ ์†๋„๊ฐ€ ๋Š๋ ค์ง
    • INSERT: ํ…Œ์ด๋ธ”์—๋Š” ์ž…๋ ฅ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ, ์ธ๋ฑ์Šค ํ…Œ์ด๋ธ”์—๋Š” ์ •๋ ฌํ•˜์—ฌ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ
    • UPDATE: ์ธ๋ฑ์Šค์—๋Š” UPDATE๊ฐ€ ์—†์–ด์„œ, DELETE ํ›„ INSERTํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด ๋ถ€ํ•˜ ๋ฐœ์ƒ
    • DELETE: ํ…Œ์ด๋ธ”์—์„œ๋งŒ ์‚ญ์ œ๋˜๊ณ  ์ธ๋ฑ์Šค ํ…Œ์ด๋ธ”์—๋Š” ๋‚จ์•„์žˆ์–ด ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ ์†๋„ ์ €ํ•˜
  • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์ด ๋†’์€ ์ปฌ๋Ÿผ (cardinality๊ฐ€ ๋‚ฎ์€ ์ปฌ๋Ÿผ)์„ ์ธ๋ฑ์Šค๋กœ ์ƒ์„ฑ ์‹œ ๋ถˆ๋ฆฌํ•จ
    • ์„ ํƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก Full scan์— ๊ฐ€๊นŒ์›Œ์ง„๋‹ค

Primary Index vs Secondary Index

Primary Index

  • ๊ธฐ๋ณธํ‚ค๋ฅผ ํฌํ•จํ•˜๋Š” ์ธ๋ฑ์Šค (ํ‚ค์˜ ์ˆœ์„œ๊ฐ€ ๋ ˆ์ฝ”๋“œ์˜ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •)
  • ์ •๋ ฌ๋œ ํŒŒ์ผ
  • Clustering Index๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ

Secondary Index

  • ๊ธฐ๋ณธ ์ธ๋ฑ์Šค ์ด์™ธ์˜ ์ธ๋ฑ์Šค (ํ‚ค์˜ ์ˆœ์„œ๊ฐ€ ๋ ˆ์ฝ”๋“œ์˜ ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์Œ)

B-+tree

B-tree

  • ๋…ธ๋“œ์˜ ์ž๋ฃŒ์ˆ˜๊ฐ€ N์ด๋ผ๋ฉด ์ž์‹์˜ ์ˆ˜๋Š” N+1์ด์–ด์•ผ ํ•œ๋‹ค.
  • ๊ฐ ๋…ธ๋“œ์˜ ์ž๋ฃŒ๋Š” ์ •๋ ฌ๋œ ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค.
  • ๋…ธ๋“œ์˜ ์ž๋ฃŒDk์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋Š” Dk๋ณด๋‹ค ์ž‘์€ ๊ฐ’๋“ค์ด๊ณ  ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋Š” Dk๋ณด๋‹ค ํฐ ๊ฐ’๋“ค์ด์–ด์•ผ ํ•œ๋‹ค.
  • Root ๋…ธ๋“œ๋Š” ์ ์–ด๋„ 2๊ฐœ์ด์ƒ์˜ ์ž์‹์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
  • Root ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ ์–ด๋„ M/2๊ฐœ์˜ ์ž๋ฃŒ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์™ธ๋ถ€ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ์˜ ๊ธธ์ด๋Š” ๋ชจ๋‘ ๊ฐ™๋‹ค.
  • ์™ธ๋ถ€๋…ธ๋“œ๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋‹ค
  • ์ž…๋ ฅ์ž๋ฃŒ๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†๋‹ค.

B+tree

  • B-tree์˜ ๊ฐ ๋…ธ๋“œ์—์„œ๋Š” key ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ data๋„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
    • ์—ฌ๊ธฐ์„œ data๋Š” disk block์œผ๋กœ์˜ ํฌ์ธํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
  • B+tree๋Š” ๊ฐ node์—์„œ๋Š” key๋งŒ ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.
    • B+tree์—์„œ๋Š” data๋Š” ์˜ค์ง leaf์—๋งŒ ์กด์žฌํ•œ๋‹ค.
  • B+tree๋Š” B-tree์™€๋Š” ๋‹ฌ๋ฆฌ add, delete๊ฐ€ leaf์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค.
  • B+ tree๋Š” leaf node ๋ผ๋ฆฌ linked list๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

๋” ์•Œ์•„๋ณด๊ธฐ

Index๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ Hash์™€ B+tree ์ค‘ B+tree๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

  • Hash Table์˜ ๊ฒฝ์šฐ O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋ณด์žฅํ•ด B+tree๋ณด๋‹ค ๋น ๋ฅด๋‹ค
  • SELECT ์งˆ์˜์˜ ์กฐ๊ฑด์—๋Š” ๋ถ€๋“ฑํ˜ธ(<, >) ์—ฐ์‚ฐ์„ ํฌํ•จํ•œ๋‹ค
  • Hash Table์˜ ๊ฒฝ์šฐ ๋“ฑํ˜ธ(=)๋ฅผ ์ œ์™ธํ•œ ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ๋ถ€์ ํ•ฉํ•˜๋‹ค

์—ฌ๋Ÿฌ Column์˜ Index ์‚ฌ์šฉ

  • ์ธ๋ฑ์Šค์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค. (๋ˆ„๋ฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค)
  • ์•„๋ž˜์™€ ๊ฐ™์ด Index๊ฐ€ ์žกํ˜€์žˆ๋‹ค.

    Index: A, B, C

  • ์•„๋ž˜ ์ฟผ๋ฆฌ๋ฌธ์€ ์‹คํ–‰ ๊ณ„ํš ๋ถ„์„ ์‹œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

    explain SELECT *
    FROM EXAMPLE
    WHERE
    A = 'EXAMPLE'
    AND C = true;

  • ์•„๋ž˜ ์ฟผ๋ฆฌ๋ฌธ์€ ์‹คํ–‰ ๊ณ„ํš ๋ถ„์„ ์‹œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค.

    explain SELECT *
    FROM EXAMPLE
    WHERE
    B = '2002-07-30'
    AND C = true;

  • ์กฐํšŒ ์ฟผ๋ฆฌ ์‚ฌ์šฉ ์‹œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ตœ์†Œํ•œ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค ์กฐ๊ฑด์€ ์กฐํšŒ ์กฐ๊ฑด์— ํฌํ•จ๋˜์–ด์•ผํ•œ๋‹ค.

Reference

profile
-์˜ Velog

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