Home > DB > πŸ’Ύ[Database] Clustered Index(ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀)λŠ” λ¬΄μ—‡μΌκΉŒμš”?

πŸ’Ύ[Database] Clustered Index(ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀)λŠ” λ¬΄μ—‡μΌκΉŒμš”?
Database Database Optimization

πŸ’Ύ[Database] Clustered Index(ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀)λŠ” λ¬΄μ—‡μΌκΉŒμš”?

πŸ“Œ Intro.

  • β†˜οΈŽ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Clustered Index)λŠ” λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ˜ 데이터가 물리적으둜 μ •λ ¬λœ μƒνƒœλ‘œ μ €μž₯λ˜λŠ” μΈλ±μŠ€μž„.
    • β†˜οΈŽ 즉, ν…Œμ΄λΈ”μ˜ 데이터 ν–‰(Row)이 νŠΉμ • κΈ°μ€€(μ—΄, Column)에 따라 μ •λ ¬λ˜λ©°, μΈλ±μŠ€λŠ” κ·Έ 기쀀에 따라 ν…Œμ΄λΈ”μ˜ 물리적 μˆœμ„œλ₯Ό μœ μ§€ν•¨.

βœ…1️⃣ Clustered Index의 핡심 κ°œλ….

1️⃣ 물리적 μ •λ ¬(Physical Order).

  • β†˜οΈŽ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Clustered Index)λŠ” ν…Œμ΄λΈ”μ˜ 데이터가 인덱슀 ν‚€ 값에 따라 물리적으둜 정렬됨.
  • β†˜οΈŽ ν•œ ν…Œμ΄λΈ”μ— 단 ν•˜λ‚˜μ˜ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Clustered Index)만 생성할 수 있음.
    • β†˜οΈŽ λ°μ΄ν„°μ˜ 물리적 μˆœμ„œλŠ” ν•˜λ‚˜μ˜ κΈ°μ€€μœΌλ‘œλ§Œ μ •λ ¬ κ°€λŠ₯.

2️⃣ κΈ°λ³Έ ν‚€(Primary Key)μ™€μ˜ 관계.

  • β†˜οΈŽ λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ Primary Key(κΈ°λ³Έ ν‚€)λ₯Ό μ„€μ •ν•˜λ©΄ μžλ™μœΌλ‘œ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Clustered Index)κ°€ 생성됨.
    • β†˜οΈŽ 예λ₯Ό λ“€μ–΄, idκ°€ Primary Key둜 μ„€μ •λœ 경우, ν…Œμ΄λΈ”μ€ id μˆœμ„œλŒ€λ‘œ μ •λ ¬λ©λ‹ˆλ‹€.

3️⃣ 데이터 νŽ˜μ΄μ§€(Data Pages)

  • β†˜οΈŽ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Clustered Index)λŠ” 데이터 νŽ˜μ΄μ§€ μžμ²΄κ°€ 인덱슀의 일뢀가 됨.
    • λ”°λΌμ„œ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Clustered Index)λ₯Ό μ‚¬μš©ν•˜λ©΄ 데이터에 직접 μ ‘κ·Όν•  수 μžˆμ–΄ 검색 속도가 빠름.

4️⃣ Non-Clustered Index (λΉ„ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀)μ™€μ˜ 차이

  • β†˜οΈŽ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Clusterd Index) : μ‹€μ œ 데이터가 인덱슀 ν‚€ μˆœμ„œλŒ€λ‘œ μ •λ ¬λ˜μ–΄ μ €μž₯λ©λ‹ˆλ‹€.
  • β†˜οΈŽ λΉ„ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Non-Clustered Index) : λ°μ΄ν„°λŠ” μ •λ ¬λ˜μ§€ μ•ŠμœΌλ©°, μΈλ±μŠ€λŠ” λ°μ΄ν„°μ˜ μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

βœ…2️⃣ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀의 μž₯단점.

πŸ‘ μž₯점.

1️⃣ λΉ λ₯Έ 검색 κΈ°λŠ₯.

  • β†˜οΈŽ 인덱슀 ν‚€ κ°’μœΌλ‘œ 직접 μ •λ ¬λœ 데이터λ₯Ό λΉ λ₯΄κ²Œ μ‘°νšŒν•  수 있음.

2️⃣ λ²”μœ„ 검색 μ΅œμ ν™”.

  • β†˜οΈŽ BETWEEN, ORDER BY, GROUP BY 같은 λ²”μœ„ 기반 쿼리에 μœ λ¦¬ν•¨.

3️⃣ 데이터 μ ‘κ·Ό λΉ„μš© 절감.

  • β†˜οΈŽ 데이터 νŽ˜μ΄μ§€ μžμ²΄κ°€ 인덱슀의 μΌλΆ€μ΄λ―€λ‘œ μΆ”κ°€ 포인터가 ν•„μš” μ—†μŒ.

πŸ‘Ž 단점.

1️⃣ 데이터 μ‚½μž…/μ‚­μ œ μ„±λŠ₯ μ €ν•˜.

  • β†˜οΈŽ 인덱슀 μˆœμ„œμ— 따라 데이터가 μ •λ ¬λ˜λ―€λ‘œ μ‚½μž…/μ‚­μ œ μ‹œ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•  수 있음.

2️⃣ λ¦¬λΉŒλ“œ λΉ„μš©.

  • β†˜οΈŽ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Clustered Index)κ°€ 자주 λ³€κ²½λ˜λ©΄ 인덱슀λ₯Ό μž¬κ΅¬μ„±ν•΄μ•Ό ν•  μˆ˜λ„ 있음.

3️⃣ ν•œ 개만 생성 κ°€λŠ₯.

  • β†˜οΈŽ ν…Œμ΄λΈ”λ‹Ή ν•˜λ‚˜μ˜ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Clustered Index)만 생성할 수 있음.

βœ…3️⃣ μ–Έμ œ μ‚¬μš©ν•΄μ•Ό ν• κΉŒ?

1️⃣ 자주 μ‘°νšŒλ˜λŠ” ν…Œμ΄λΈ”.

  • β†˜οΈŽ 쑰회 쿼리가 λΉˆλ²ˆν•˜κ²Œ 싀행될 경우 ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀λ₯Ό μ‚¬μš©.

2️⃣ λ²”μœ„ 검색이 λ§Žμ€ 경우.

  • β†˜οΈŽ BETWEEN, >, < 와 같은 λ²”μœ„ 검색을 자주 μ‚¬μš©ν•œλ‹€λ©΄ μœ λ¦¬ν•¨.

3️⃣ μ •λ ¬λœ κ²°κ³Όκ°€ 자주 ν•„μš”ν•œ 경우.

  • β†˜οΈŽ ORDER BY 절이 자주 μ‚¬μš©λ˜λŠ” 경우 νš¨κ³Όμ μž„.

βœ…4️⃣ 비ꡐ: Clustered Index vs Non-Clustered Index

ꡬ뢄 Clustered Index Non-Clustered Index
물리적 μ €μž₯ 데이터 μžμ²΄κ°€ 정렬됨 λ°μ΄ν„°λŠ” μ •λ ¬λ˜μ§€ μ•ŠμŒ
인덱슀 개수 ν•˜λ‚˜λ§Œ 생성 κ°€λŠ₯ μ—¬λŸ¬ 개 생성 κ°€λŠ₯
μ„±λŠ₯ 쑰회 μ„±λŠ₯이 더 빠름 데이터 접근에 μΆ”κ°€ 단계 ν•„μš”
주둜 μ‚¬μš©λ˜λŠ” 경우 Primary Key둜 μ‚¬μš©λ¨ Secondary Key둜 μ‚¬μš©λ¨

πŸš€ 정리.

  • β†˜οΈŽ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀(Clustered Index)λŠ” ν…Œμ΄λΈ”μ˜ 데이터λ₯Ό νŠΉμ • ν‚€ κΈ°μ€€μœΌλ‘œ 물리적으둜 μ •λ ¬ν•˜μ—¬ μ €μž₯ν•˜λŠ” μΈλ±μŠ€μž…λ‹ˆλ‹€.
    • β†˜οΈŽ 주둜 Primary Key에 μ˜ν•΄ μƒμ„±λ˜λ©°, λΉ λ₯Έ 검색 및 λ²”μœ„ μ‘°νšŒμ— μœ λ¦¬ν•©λ‹ˆλ‹€.
    • β†˜οΈŽ ν•˜μ§€λ§Œ μ‚½μž…/μ‚­μ œ μ‹œ μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν•  수 있고, ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μ—λŠ” ν•˜λ‚˜μ˜ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀만 μ‘΄μž¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

🎯 핡심 포인트:

  • β†˜οΈŽ 물리적 정렬이 핡심
  • β†˜οΈŽ Primary Keyκ°€ 기본적으둜 Clustered Index
  • β†˜οΈŽ 쑰회 μ΅œμ ν™”μ— 유리, μ‚½μž…/μ‚­μ œ λΉ„μš©μ€ 증가

πŸ™Œ λ°μ΄ν„°λ² μ΄μŠ€ 섀계 μ‹œ ν…Œμ΄λΈ”μ˜ νŠΉμ„±κ³Ό 쿼리 νŒ¨ν„΄μ„ κ³ λ €ν•˜μ—¬ ν΄λŸ¬μŠ€ν„°ν˜• 인덱슀λ₯Ό 적절히 ν™œμš©ν•΄μ•Ό 함.