Database

์ธ๋ฑ์Šค(Index) ์•Œ์•„๋ณด๊ธฐ

91MS 2022. 7. 4. 02:08
๐Ÿ“–
๐Ÿ“Œ
3์ค„ ์š”์•ฝ
  1. ์ธ๋ฑ์Šค๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด ์ฑ…์˜ ๋ชฉ์ฐจ์™€ ๊ฐ™๋‹ค.
  1. ์šฐ๋ฆฌ๊ฐ€ ์‹ ๊ฒฝ์จ์•ผํ•  ๊ณณ์€ ์ˆ˜ํ‰์  ํƒ์ƒ‰์ด๋‹ค.
  1. MySQL์˜ ์‹คํ–‰๊ณ„ํš์„ ํ†ตํ•ด ์ธ๋ฑ์Šค ํŠœ๋‹์„ ํ•ด๋ณด์ž.


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

๐Ÿ’ก
์ธ๋ฑ์Šค๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด ์ฑ…์˜ ๋ชฉ์ฐจ์™€ ๊ฐ™๋‹ค.

๋งค์šฐ ๋งค์šฐ ๋‘๊บผ์šด ์ฑ…์— ๋ชฉ์ฐจ ํŽ˜์ด์ง€๊ฐ€ ์—†๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”?

์ฑ… ์•ˆ์— ๋‚ด์šฉ์„ ์ฐพ์„ ๋•Œ ์—ฌ๋Ÿฌ๋ถ„์€ ์–ด๋””๋ฅผ ์‚ดํŽด๋ณด์‹œ๋‚˜์š”?

์šฐ๋ฆฌ๋“ค์€ ํ•ญ์ƒ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฐพ์„ ๋•Œ ์ฃผ์†Œ, ๋ชฉ์ฐจ๋ฅผ ๋ณด๊ณ  ์ฐพ์Šต๋‹ˆ๋‹ค.

DB Index๋„ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋งŽ์€ ๋ฐ์ดํ„ฐ ์•ˆ์—์„œ ์ฐพ๊ณ  ์‹ถ์€ ๋‚ด์šฉ์„ ์–ด๋–ป๊ฒŒ ์ฐพ์„๊นŒ์š”?

๊ทธ๊ฒƒ์„ ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ DB Index ์ž…๋‹ˆ๋‹ค.

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

์ธ๋ฑ์Šค ์ข…๋ฅ˜๋ก  ํฌ๊ฒŒ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค์™€ ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

DB๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ๋•Œ ํฌ๊ฒŒ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค.

์‹œํ€€์…œ ์—‘์„ธ์Šค

๐Ÿ’ก
๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ธ์ ‘ํ•œ ํŽ˜์ด์ง€๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ฝ๋Š” ๋ฐฉ์‹, ๊ทธ๋ ‡๊ธฐ์— ์ธ์ ‘ํ•œ ํŽ˜์ด์ง€๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ฝ์„ ์ˆ˜ ์žˆ์Œ
  • ํ…Œ์ด๋ธ” ํ’€์Šค์บ”์ด ์‹œํ€€์…œ ์—‘์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•จ
  • Multi Block I/O ๋ฐฉ์‹์œผ๋กœ ํšจ์œจ์ ์ด๊ฒŒ ๋””์Šคํฌ๋ฅผ ์ฝ์–ด์˜ด

๋žœ๋ค ์—‘์„ธ์Šค

๐Ÿ’ก
์ •ํ•ด์ง„ ์ˆœ์„œ์—†์ด ์ด๋™ํ•˜๋Š” ๋งŒํผ ๋””์Šคํฌ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์›€์ง์ž„์ด ํ•„์š”ํ•˜๊ณ , ๋‹ค์ค‘ ํŽ˜์ด์ง€ ์ฝ๊ธฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•จ
  • Index range scan์ด ๋žœ๋ค ์—‘์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•จ
  • Single Block I/O ๋ฐฉ์‹์œผ๋กœ ๋ ˆ์ฝ”๋“œ ํ•˜๋‚˜๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ I/O๊ฐ€ ๋ฐœ์ƒํ•จ
  • ์ฝ์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์ •๋Ÿ‰์„ ๋„˜๊ฒŒ๋˜๋ฉด ์ธ๋ฑ์Šค ์Šค์บ”๋ณด๋‹ค ํ’€์Šค์บ”์ด ์œ ๋ฆฌํ•จ
  • ์ธ๋ฑ์Šค๋Š” ํฐ ํ…Œ์ด๋ธ”์—์„œ ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์œ ๋ฆฌ
  • ๋žœ๋ค I/O๋ฅผ ์–ด๋–ป๊ฒŒ ์ค„์ด๋Š”์ง€๊ฐ€ ์ค‘์š”
    • ์Šค์บ” ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ์•ผํ•จ

์ธ๋ฑ์Šค์˜ ํƒ์ƒ‰ ๊ณผ์ •

์ธ๋ฑ์Šค๋Š” ์ˆ˜์ง์  ํƒ์ƒ‰๊ณผ ์ˆ˜ํ‰์  ํƒ์ƒ‰์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ง์  ํƒ์ƒ‰

๐Ÿ’ก
์‹œ์ž‘๊ณผ ๋์ง€์ ์„ ์ฐพ๋Š” ๊ฒƒ ํ•™์ƒ ๋ช…๋ถ€ ํƒ์ƒ‰

์ˆ˜ํ‰์  ํƒ์ƒ‰

๐Ÿ’ก
์ตœ์ข… ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ฒƒ ์ง์ ‘ ๊ต์‹ค ์ฐพ์•„๊ฐ€๊ธฐ
  • ์ˆ˜ํ‰์  ํƒ์ƒ‰ ์ค‘ ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋ผ๋ฉด ๋žœ๋ค ์•ก์„ธ์Šค, ์ฆ‰ ์‹ฑ๊ธ€ I/O๊ฐ€ ๋ฐœ์ƒํ•จ
  • ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค์ธ PK๋Š” mysql๊ธฐ์ค€์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œํ€€์…œ ์—‘์„ธ์Šค๊ฐ€ ๋ฐœ์ƒํ•จ
  • ์ด ๋ถ€๋ถ„์„ ์ž˜ ํŠœ๋‹ํ•ด์•ผ ์„ฑ๋Šฅ์ด ์ƒ์Šนํ•จ

์ธ๋ฑ์Šค๋ฅผ ํŠœ๋‹ํ•ด๋ณด์ž

์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ํŠœ๋‹ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ mysql ์›Œํฌ๋ฒค์น˜๋ฅผ ํ™œ์šฉํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์›Œํฌ๋ฒค์น˜์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•œ ํ›„ ์‹คํ–‰๊ณ„ํš ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ด ์ฟผ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•  ์ง€์— ๋Œ€ํ•ด ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํŠœ๋‹์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ฟผ๋ฆฌ๋ฌธ ์•ž์— Explain ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์„ธ๋ถ€์ ์ธ ๋‚ด์šฉ๋„ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Explain ์„ ํ†ตํ•ด ๋‚˜์˜ค๋Š” ์„ธ๋ถ€์ ์ธ ๋‚ด์šฉ ์ค‘ ์šฐ๋ฆฌ๊ฐ€ ์‚ดํŽด๋ด์•ผ ํ•  ์ปฌ๋Ÿผ์€ 7๊ฐœ ์ž…๋‹ˆ๋‹ค.

์‹คํ–‰๊ณ„ํš ์‚ดํŽด๋ณด๊ธฐ

  1. id
    • SQL ๋ฌธ์ด ์ˆ˜ํ–‰๋˜๋Š” ์ˆœ์„œ
    • ์œ„์˜ ์˜ˆ์‹œ์—” id๊ฐ€ ๋ชจ๋‘๋‹ค 1์ด์ง€๋งŒ 2์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋ฉด 1โ†’2 ์ˆœ์„œ๋กœ ์‹คํ–‰๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋จ
    • id๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์กฐ์ธ์„ ์˜๋ฏธํ•จ
  1. select_type
    • SIMPLE โ†’ ๋‹จ์ˆœํ•œ SELECT ๋ฌธ
    • PRIMARY โ†’ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์‹ธ๋Š” ์™ธ๋ถ€ ์ฟผ๋ฆฌ, UNION์ด ํฌํ•จ๋  ๊ฒฝ์šฐ ์ฒซ๋ฒˆ์งธ SELECT ๋ฌธ
    • SUBQUERY โ†’ ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ (SELECT, WHERE ์ ˆ์— ์ถ”๊ฐ€๋œ ์„œ๋ธŒ์ฟผ๋ฆฌ)
    • DERIVED โ†’ FROM ์ ˆ์— ์ž‘์„ฑ๋œ ์„œ๋ธŒ์ฟผ๋ฆฌ
    • UNION โ†’ UNION, UNION ALL๋กœ ํ•ฉ์ณ์ง„ SELECT
    • DEPENDENT SUBQUERY โ†’ ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ”๊นฅ์ชฝ SELECT ์ฟผ๋ฆฌ์— ์ •์˜๋œ ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉ
    • DEPENDENT UNION โ†’ ์™ธ๋ถ€์— ์ •์˜๋œ ์ปฌ๋Ÿผ์„ UNION์œผ๋กœ ๊ฒฐํ•ฉ๋œ ์ฟผ๋ฆฌ์—์„œ ์‚ฌ์šฉ
    • DEPENDENT ํƒ€์ž…์€ ๋Œ€๋ถ€๋ถ„ ํŠœ๋‹ํ•ด์•ผํ•จ (์„ฑ๋Šฅ์ €ํ•˜)
  1. type
    • ALL โ†’ ํ…Œ์ด๋ธ” ํ’€์Šค์บ”
    • range โ†’ ์ธ๋ฑ์Šค ๋ ˆ์ธ์ง€ ์Šค์บ”
    • index โ†’ ์ธ๋ฑ์Šค ํ’€์Šค์บ”
    • eq_ref โ†’ ์กฐ์ธ์ด ์ˆ˜ํ–‰๋  ๋•Œ ๋“œ๋ฆฌ๋ธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ์— PK ํ˜น์€ ๊ณ ์œ  ์ธ๋ฑ์Šค๋กœ ๋‹จ 1๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ
    • ref โ†’ eq_ref์™€ ๊ฐ™์œผ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ 2๊ฑด ์ด์ƒ์ผ ๊ฒฝ์šฐ
    • const โ†’ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹จ 1๊ฑด ์ผ ๋•Œ
    • system โ†’ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๊ฑฐ๋‚˜ ํ•œ ๊ฐœ๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ
  1. key
    • ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์‹ค์ œ๋กœ ์„ ํƒํ•œ ์ธ๋ฑ์Šค
  1. rows
    • SQL๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ ‘๊ทผํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ชจ๋“  ํ–‰ ์ˆ˜
  1. filtered
    • ํ•„ํ„ฐ๋ง ๋˜๊ณ  ๋‚จ์€ ๋ ˆ์ฝ”๋“œ ๋น„์œจ
    • ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด ์ฝ์–ด๋“ค์ธ ๋ฐ์ดํ„ฐ ์ค‘ MySQL ์—”์ง„์ด ํ•„ํ„ฐ๋งํ•˜๊ณ  ๋‚จ์€ ๋น„์œจ์„ ์˜๋ฏธ
    • ์ฆ‰, ๋†’์„ ์ˆ˜๋ก ๋””์Šคํฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํƒ์ƒ‰ํ–ˆ๋‹ค๋Š” ์˜๋ฏธ
  1. extra
    • Distinct โ†’ ์ค‘๋ณต ์ œ๊ฑฐ์‹œ
    • Using where โ†’ WHERE ์ ˆ๋กœ ํ•„ํ„ฐ์‹œ
    • Using temporary โ†’ ๋ฐ์ดํ„ฐ์˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ ์ž ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ, ๋ณดํ†ต DISTINCT, GROUP BY, ORDER BY ๊ตฌ๋ฌธ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ์ž„์‹œํ…Œ์ด๋ธ”์„ ์ƒ์„ฑ
    • Using index โ†’ ๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ฝ์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค๋งŒ ์ฝ์–ด์„œ ์ฒ˜๋ฆฌ, ์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค๋ผ๊ณ  ํ•จ
    • Using filesort โ†’ ์ •๋ ฌ์‹œ

๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฒŒ ์ข‹์€ ํŠœ๋‹์ธ๊ฐ€์š”?

๐Ÿ’ก
์œ„ ์‚ฌ์ง„์˜ select_type, type, extra 3๋ถ€๋ถ„๋งŒ ์‹ ๊ฒฝ์จ์„œ ํŠœ๋‹ํ•ด๋„ ๊ฝค๋‚˜ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •๋ฆฌ

๊ฐ„๋‹จํ•˜๊ฒŒ ์ธ๋ฑ์Šค์˜ ์ •์˜, ์ข…๋ฅ˜, ํƒ์ƒ‰๊ณผ์ •, ํŠœ๋‹๊นŒ์ง€ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์„ธ๋ถ€์ ์ธ ๋‚ด์šฉ๊ณผ ๊ตฌํ˜„ ๋ฐ ์‹ค์Šต๊นŒ์ง€ ์ง„ํ–‰ํ•˜๊ธฐ์—” ๋ถ„๋Ÿ‰์ด ๋„ˆ๋ฌด ๋งŽ์„ ๊ฒƒ ๊ฐ™์•„ ํ•ต์‹ฌ์ ์ธ ๋‚ด์šฉ๋งŒ ์ถ”๋ ค ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋ฐฑ๋ฌธ์ด๋ถˆ์—ฌ์ผํƒ€ ์ง์ ‘ SQL์„ ์ž‘์„ฑํ•˜์—ฌ DB์˜ ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค ๋บ๋‹คํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•ด๋ณด์‹œ๋ฉด ๋”์šฑ๋” ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ! ์›Œํฌ๋ฒค์น˜์˜ ์‹คํ–‰๊ณ„ํš์„ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”!

๊ทธ๋Ÿผ ์ด๋งŒ ๋!


Reference

  • ์šฐ์•„ํ•œ ํ…Œํฌ์บ ํ”„ Pro - ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ


Uploaded by N2T