3 ๋ถ„ ์†Œ์š”

[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐Ÿซ ์ฐฐ๋ฆฌ์˜ แ„‹แ…ตแ†ซแ„ƒแ…ฆแ†จแ„‰แ…ตแ†ผ๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌ.

๋’ท๋ถ€๋ถ„ ์„ค๋ช…(non-clustered, non-clustere + clustered)๊ฐ€ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋จ.

Index๋ž€?

  • ์ƒ‰์ธ(์–ด๋–ค ๊ฒƒ์„ ๋’ค์ ธ์„œ ์ฐพ์•„๋‚ด๊ฑฐ๋‚˜ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ฐํž˜ = ์ฐพ์•„๋ณด๊ธฐ)
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด
  • ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค, ์ฑ…์˜ ๋ชฉ์ฐจ, ์ฑ… ๋’ค์˜ ์ฐพ์•„๋ณด๊ธฐ ๋“ฑ

์ฑ…์˜ Index ์‚ฌ์šฉ ๋ชฉ์  โ†’ ์ˆ˜ ๋งŽ์€ ํŽ˜์ด์ง€ ์ค‘ ์›’์•„๋Š” ๋‚ด์šฉ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ,

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ Index ์‚ฌ์šฉ ๋ชฉ์  โ†’ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

์ธ๋ฑ์Šค์˜ ์ž‘์„ฑ/์‚ญ์ œ

  • ์ธ๋ฑ์Šค๋„ ๊ฒฐ๊ตญ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด์ด๋‹ค. ์ฆ‰ ์ €์žฅ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•œ๋‹ค. (๋ณดํ†ต ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ 10%๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•จ)
  • ์˜ค๋ผํด, DB2 ๋“ฑ์—์„œ๋Š” ์Šคํ‚ค๋งˆ ๊ฐ์ฒด์ด๋ฉฐ MySQL, SQL Server ๋“ฑ์—์„œ๋Š” ํ…Œ์ด๋ธ” ๋‚ด์˜ ๊ฐ์ฒด์ด๋‹ค.

์‚ฌ์šฉ๋ฒ•

Untitled

๋‹ค์ค‘ ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค : ์ปฌ๋Ÿผ๋ช…์„ ์—ฌ๋Ÿฌ๊ฐœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฉ”์ผ, ์ด๋ฆ„, ์ฃผ์†Œ ์ˆœ์„œ๋กœ ๋‹ค์ค‘์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ–ˆ์„ ๋•Œ์™€ ์ด๋ฆ„, ์ฃผ์†Œ, ์ด๋ฉ”์ผ ์ˆœ์„œ๋กœ ๋‹ค์ค‘์ปฌ๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ–ˆ์„ ๋•Œ๋Š” ๋‹ค๋ฅด๋‹ค. ์ˆœ์„œ์— ๋”ฐ๋ผ ์ด ์ธ๋ฑ์Šค์˜ ํšจ์œจ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ธ๋ฑ์Šค ๊ฒ€์ƒ‰์— ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

Full Table Scan

์ด๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์–ด ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ปฌ๋Ÿผ์— ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ผญ ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ ค ์žˆ๋‹ค๊ณ  ํ•ด์„œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค๊ฐ€ ๊ฑธ๋ ค์žˆ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ Full Table Scan์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

B-Tree

์ธ๋ฑ์Šค์—์„œ ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๋งŽ์ด ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ B-Tree๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

B-ํŠธ๋ฆฌ๋Š” ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์น˜๋Š” ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. Balanced - Tree ๋กœ ๋…ธ๋“œ๋ฅผ 2๊ฐœ ์ด์ƒ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๊ณ , ๋†’์ด๊ฐ€ ํ•ญ์ƒ ๊ฐ™์€ ํŠธ๋ฆฌ์ด๋‹ค.

Clustered Index VS NON-Clustered Index

Cluster :๋ฌด๋ฆฌ, ๋ฌด๋ฆฌ๋ฅผ ์ด๋ฃจ๋‹ค, ์š”์†Œ๋ฅผ ๋ชจ์€ ๋‹จ์œ„์ฒด

Clustered Index : ๋ฐ์ดํ„ฐ์™€ ๋ฌด๋ฆฌ๋ฅผ ์ด๋ฃฌ ์ธ๋ฑ์Šค, ๊ตฐ์ง‘ ์ธ๋ฑ์Šค โ†’ ์ฆ‰ ์ธ๋ฑ์Šค ์•ˆ์— ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋จ

Non Clustered Index : ๋ฐ์ดํ„ฐ์™€ ๋ฌด๋ฆฌ๋ฅผ ์ด๋ฃจ์ง€ ์•Š์€ ์ธ๋ฑ์Šค ๋น„ ๊ตฐ์ง‘ ์ธ๋ฑ์Šค โ†’ ์ธ๋ฑ์Šค ์•ˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Œ.

Clustered Index

PK๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ์•„์ด๋””์—๋„ ์ด๋ฏธ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค.

Pk๋ฅผ ์ƒ์„ฑํ•˜๋ฉด Clustered Index๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. PK๊ฐ€ ๊ณง Clustered Index์ธ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  Pk์™€ clustered index๋Š” ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ๋‹ค ์ •๋„๋กœ ์ƒ๊ฐํ•˜์ž.

ํŠน์ง•:

  • ํ…Œ์ด๋ธ”๋‹น 1๊ฐœ๋งŒ ์กด์žฌํ•œ๋‹ค. (๋งŒ์ผ 2๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ์ •๋ ฌ ๊ธฐ์ค€์ด ๋ชจํ˜ธํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • PK ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์นผ๋Ÿผ์„ ์ƒ์„ฑํ•˜๋ฉฐ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค
  • ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๊ฐ€ ํ•จ๊ป˜ ์กด์žฌํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฆฌํ”„ํŽ˜์ด์ง€๋Š” ๋ฐ์ดํ„ฐํŽ˜์ด์ง€์™€ ๊ฐ™์œผ๋ฉฐ ๋ฐ์ดํ„ฐ๋Š” ์ •๋ ฌ๋œ ์ƒํƒœ์ž„์„ ๋œปํ•œ๋‹ค.

๊ตฌ์กฐ:

Untitled

์˜ˆ๋ฅผ ๋“ค์–ด ์œ„ ์ƒํ™ฉ์—์„œ DDD๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค๊ณ  ํ•˜์ž. DDD์˜ ์œ„์น˜๋Š” CCC ๋‹ค์Œ์ด๋ฏ€๋กœ, ๋ฆฌํ”„ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐˆ ๊ณต๊ฐ„์ด ์—†๋‹ค. ๋”ฐ๋ผ์„œ ํŽ˜์ด์ง€๋ฅผ ๋ถ„ํ• ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

Untitled

ํŽ˜์ด์ง€ ๋ถ„ํ• ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฐ ์ž‘์—…์ด๋‹ค. ํŽ˜์ด์ง€ ๋ถ„ํ• ์€ ์•ž์„œ ๋งํ–ˆ๋˜ update, insert delete์ž‘์—…์—์„œ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐํšŒ ์™ธ์—์„œ๋Š” ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค

์—ฌ๊ธฐ์„œ ๋‹ค์‹œ LLL์„ ์‚ฝ์ž…ํ•˜๋Š” ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด ๋ณด์ž

Untitled

์ด๋ฒˆ์—๋Š” ๋ฃจํŠธํŽ˜์ด์ง€์˜ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•œ ํ˜„์ƒ์ด ์ผ์–ด๋‚œ๋‹ค.๋”ฐ๋ผ์„œ ๋ฃจํŠธ ํŽ˜์ด์ง€๋ฅผ ๋ถ„ํ• ํ•ด์ฃผ๊ณ  ๋ธŒ๋žœ์น˜ ํŽ˜์ด์ง€๋กœ ๋งŒ๋“ค์–ด์ค€ ํ›„ ์ƒˆ๋กœ์šด ๋ฃจํŠธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๋ธŒ๋žœ์น˜ ํŽ˜์ด์ง€๋ž€ ๋ฃจํŠธํŽ˜์ด์ง€์™€ ๋ฆฌํ”„ํŽ˜์ด์ง€๋ฅผ ์ด์–ด์ฃผ๋Š” ํŽ˜์ด์ง€์ด๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐธ๋Ÿฐ์Šค๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃฌ๋‹ค.

Untitled

์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ข€๋” ๊ฐ€๊นŒ์šด ๋ชจ์Šต์˜ b-ํŠธ๋ฆฌ์ด๋‹ค. ๋งŒ์ผ G์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ฐพ์œผ๋ ค๋ฉด Full Table Scan์˜ ๊ฒฝ์šฐ ๋น„๊ต์—ฐ์‚ฐ์„ 7๋ฒˆ์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ b-ํŠธ๋ฆฌ์— ์ธ๋ฑ์‹ฑ์„ ํ–ˆ๋‹ค๋ฉด ๋‹จ ๋‘๋ฒˆ์˜ ์—ฐ์‚ฐ์œผ๋กœ ๊ฐ’์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

Non-Clustered Index (Secondary Index)

  • ๋ณด์กฐ ์ธ๋ฑ์Šค , ํ…Œ์ด๋ธ”์— ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ
  • Unique ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์ปฌ๋žŒ์„ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ
  • ์ธ๋ฑ์Šค์™€ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๊ฐ€ ๋”ฐ๋กœ ์กด์žฌโ†’ ์ฆ‰ ๋ฆฌํ”„ํŽ˜์ด์ง€์— ๋ ˆํผ๋Ÿฐ์Šค, ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์˜ ์ฃผ์†Œ๊ฐ’์ด ์žˆ์Œ!
  • ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์ง€ ์•Š์•„๋„ ๋จ
  • Clustered Index์™€ ๋น„๊ตํ•ด์„œ ์กฐํšŒ์†๋„๊ฐ€ ์•ฝ๊ฐ„ ๋А๋ฆฌ์ง€๋งŒ Insert, Update, Delete ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ์Œ.

Untitled

Clustered Index + Non Clustered Index

Untitled

์œ„๊ฐ€ non clustered index, ์•„๋ž˜๊ฐ€ clustered Index์ด๋‹ค.

์ดํ•ด๊ฐ€ ์•ˆ๋จ โ†’ ์ถ”๊ฐ€๋กœ ๋‹ค๋ฅธ์ž๋ฃŒ ๊ฒ€์ƒ‰ํ•˜์ž

์นด๋””๋„๋ฆฌํ‹ฐCardinality

Untitled

ex) ์„ฑ๋ณ„ vs Email vs ์ด๋ฆ„

์„ฑ๋ณ„์€ ๋‹จ ๋‘๊ฐ€์ง€๋‹ค. ๋งŒ์ผ ์ธ๋ฑ์Šค๋ฅผ ์„ฑ๋ณ„์— ๊ฑด๋‹ค๋ฉด ๋‚จ์ž์™€ ์—ฌ์ž ๋‹จ ๋‘๊ฐœ๋กœ ๋‚˜๋‰˜๊ณ  ๊ทธ ์•ˆ์—์„œ ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€ ๋ฆฌํ”„ํŽ˜์ด์ง€๋“ค์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.

์ด๋ฉ”์ผ์ด ๊ฐ€์žฅ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ• ๋•Œ ํšจ์œจ์ด ์ข‹๋‹ค.

์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’๋‹ค๋Š” ๊ฒƒ์€ ์ค‘๋ณต๋œ ์ˆ˜์น˜๊ฐ€ ๋‚ฎ์€ ๊ฒƒ์„ ์˜๋ฏธ.

์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ์นผ๋Ÿผ์„ ์ธ๋ฑ์Šค๋กœ ์žก์•„์•ผํ•œ๋‹ค.

์ธ๋ฑ์Šค ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ

Untitled

์ธ๋ฑ์Šค๋Š” Where์ ˆ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

  • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค๋Š” ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค(Insert, Update, Delete ์„ฑ๋Šฅ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€)
  • ์™ธ๋ž˜ํ‚ค๋ฅผ ์ง€์ •ํ•œ ์—ด์—๋Š” ์ž๋™์œผ๋กœ ์™ธ๋ž˜ํ‚ค ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • where์ ˆ์„ ์“ฐ๋„๋ผ๋„ ์ž์ฃผ ์‚ฌ์šฉ๋ผ์–ด์•ผ ์ธ๋ฑ์Šค์˜ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค.
  • Where ์ ˆ์˜ ์นผ๋Ÿผ์— ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.(๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ–ˆ์„ ์‹œ์—๋„ ๊ฒ€์ƒ‰์— ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.)

Untitled

ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ