[DB] INDEX

์ธ๋ฑ์Šค(Index)๋ž€?

๋ฐ์ดํ„ฐ์˜ INSERT, UPDATE, DELETE ์ž‘์—…์„ ํฌ์ƒํ•˜๊ณ  ์ €์žฅ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
์ฑ…์˜ ์ƒ‰์ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ธ๋ฑ์Šค์˜ ์ข…๋ฅ˜

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

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

  • ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์—ฌ์ค€๋‹ค.
  • ์ „๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

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

  • ์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด DB์˜ ์•ฝ 10%์˜ ์ €์žฅ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
  • ์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์ด ์ž์ฃผ ์ผ์–ด๋‚  ๋•Œ ์ธ๋ฑ์Šค๋ฅผ ์žฌ์ž‘์„ฑํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ผ์น  ์ˆ˜ ์žˆ๋‹ค.
  • ์ธ๋ฑ์Šค๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ์—ญํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์ข‹์€ ์ปฌ๋Ÿผ

  • ์นด๋””๋„๋ฆฌํ‹ฐ(Cardinality)๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ
    ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’๋‹ค๋Š” ๊ฒƒ์€ ์ค‘๋ณต๋„๊ฐ€ ๋‚ฎ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.(= ๋Œ€๋ถ€๋ถ„ ๋‹ค๋ฅธ ๊ฐ’๋“ค์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.)
  • ์„ ํƒ๋„(Selectivity)๊ฐ€ ๋‚ฎ์€ ์ปฌ๋Ÿผ
    ์„ ํƒ๋„๊ฐ€ ๋‚ฎ๋‹ค๋Š” ๊ฒƒ์€ ํ•œ ์ปฌ๋Ÿผ์ด ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ’ ํ•˜๋‚˜๋กœ ์ ์€ row๊ฐ€ ๊ฒ€์ƒ‰๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • WHERE, JOIN, ORDER BY ์ ˆ์— ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ
  • ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ์ปฌ๋Ÿผ

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

  • ๊ฒ€์ƒ‰ํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ 15~20% ์ด์ƒ์ด๋ผ๋ฉด, MySQL์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ 10~15% ์ด๋‚ด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋  ๋•Œ ํšจ์œจ์ ์ด๊ณ , ๊ทธ ์ด์ƒ์ด ๋  ๋•Œ๋Š” ์˜คํžˆ๋ ค ํ’€์Šค์บ”์ด ๋” ๋น ๋ฅด๋‹ค.
  • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค๋Š” ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ธ๋ฑ์Šค๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

  • ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์„ ๋ถ€์ •ํ˜• ๋น„๊ตํ•  ๋•Œ
    WHERE ์ปฌ๋Ÿผ <> '0'
  • LIKE ๊ฒ€์ƒ‰์‹œ %๊ฐ€ ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์˜ ์•ž์— ์œ„์น˜ํ•  ๋•Œ
    WHERE ์ปฌ๋Ÿผ LIKE '%๋ฏผ์ˆ˜'
  • ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์„ ๊ฐ€๊ณตํ•  ๋•Œ
    WHERE REPLACE(์ปฌ๋Ÿผ, 'A', 'B') = 'BB'
  • ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์— ํ˜•๋ณ€ํ™˜์„ ํ•  ๋•Œ
    WHERE ์ปฌ๋Ÿผ(ex. ๋ฌธ์ž์—ด ํƒ€์ž…) = 123

GROUP BY ์ ˆ์˜ ์ธ๋ฑ์Šค ์œ ์˜์‚ฌํ•ญ

  • GROUP BY ์ ˆ์— ๋ช…์‹œ๋œ ์ปฌ๋Ÿผ์ด ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์˜ ์ˆœ์„œ์™€ ์œ„์น˜๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
  • WHERE ์ ˆ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ GROUP BY ์ ˆ์— ๋ช…์‹œ๋œ ์ปฌ๋Ÿผ์ด ํ•˜๋‚˜๋ผ๋„ ์ธ๋ฑ์Šค์— ์—†์œผ๋ฉด GROUP BY ์ ˆ์€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ปฌ๋Ÿผ ์ค‘์— ๋’ค์ชฝ์— ์žˆ๋Š” ์ปฌ๋Ÿผ์€ GROUP BY ์ ˆ์— ๋ช…์‹œ๋˜์ง€ ์•Š์•„๋„ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ธ๋ฑ์Šค์˜ ์•ž์ชฝ์— ์žˆ๋Š” ์ปฌ๋Ÿผ์ด GROUP BY ์ ˆ์— ๋ช…์‹œ๋˜์ง€ ์•Š์œผ๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

ORDER BY ์ ˆ์˜ ์ธ๋ฑ์Šค ์œ ์˜์‚ฌํ•ญ

  • ์ •๋ ฌ๋˜๋Š” ๊ฐ ์ปฌ๋Ÿผ์˜ ์˜ค๋ฆ„์ฐจ์ˆœ ๋ฐ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด ์ธ๋ฑ์Šค์™€ ๊ฐ™๊ฑฐ๋‚˜ ๋˜๋Š” ์ •๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ORDER BY ์ ˆ์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์ด ์˜ค๋ฆ„์ฐจ์ˆœ์ด๊ฑฐ๋‚˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์ผ ๋•Œ๋งŒ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

GROUP BY + ORDER BY ์ ˆ์˜ ์ธ๋ฑ์Šค ์œ ์˜์‚ฌํ•ญ

  • GROUP BY ์ ˆ์— ๋ช…์‹œ๋œ ์ปฌ๋Ÿผ๊ณผ ORDER BY์— ๋ช…์‹œ๋œ ์ปฌ๋Ÿผ์ด ์ˆœ์„œ์™€ ๋‚ด์šฉ์ด ๋ชจ๋‘ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

ORDER BY DESC ์ธ๋ฑ์Šค๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.(MySQL 8.0 ์ด์ „๊นŒ์ง€)

Categories:

Updated:

Leave a comment