λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Computer Science/Database

21 Index

by Dowon Kang 2024. 1. 17.

인덱슀(Index)λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ κ²€μƒ‰ μ†λ„λ₯Ό ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” λ°μ΄ν„° κ΅¬μ‘°λ‘œ, νŠΉμ • μ—΄(λ˜λŠ” μ—¬λŸ¬ μ—΄)에 λŒ€ν•œ μ •λ ¬λœ ν‚€μ™€ ν•΄λ‹Ή ν‚€κ°€ κ°€λ¦¬ν‚€λŠ” μ‹€μ œ λ°μ΄ν„° λ ˆμ½”λ“œμ˜ μœ„μΉ˜λ₯Ό λ§€ν•‘ν•©λ‹ˆλ‹€. μΈλ±μŠ€λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ κ²€μƒ‰ μ—°μ‚° μ†λ„λ₯Ό ν–₯μƒμ‹œν‚€κ³  μΏΌλ¦¬ μ„±λŠ₯을 μ΅œμ ν™”ν•˜λŠ” λ° λ„움이 λ©λ‹ˆλ‹€.


인덱슀의 μ£Όμš” νŠΉμ§•κ³Ό μ—­ν• 

  1. 검색 속도 ν–₯상: 인덱슀λ₯Ό μ‚¬μš©ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ 엔진은 검색 쑰건에 λ§žλŠ” λ ˆμ½”λ“œλ₯Ό λΉ λ₯΄κ²Œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. 특히 λŒ€λŸ‰μ˜ 데이터가 μžˆλŠ” ν…Œμ΄λΈ”μ—μ„œ νŠΉμ • 쑰건에 λ”°λ₯Έ 검색을 μˆ˜ν–‰ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
  2. μ •λ ¬ 및 μœ μΌμ„± μœ μ§€: μΈλ±μŠ€λŠ” νŠΉμ • 열에 λŒ€ν•΄ μ •λ ¬λœ μˆœμ„œλ‘œ 데이터λ₯Ό μœ μ§€ν•˜λ©°, ν•„μš”μ— 따라 ν•΄λ‹Ή μ—΄μ˜ 값이 μœ μΌν•˜λ„λ‘ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 주둜 κΈ°λ³Έ ν‚€λ‚˜ 고유 μ œμ•½ 쑰건에 μ‚¬μš©λ©λ‹ˆλ‹€.
  3. 쑰인 μ„±λŠ₯ ν–₯상: μΈλ±μŠ€λŠ” 쑰인 연산을 μ΅œμ ν™”ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€. μ—¬λŸ¬ ν…Œμ΄λΈ” κ°„μ˜ κ΄€κ³„μ—μ„œ 쑰인 연산은 인덱슀λ₯Ό ν™œμš©ν•˜μ—¬ 더 효율적으둜 μˆ˜ν–‰λ  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. WHERE 쑰건 μ΅œμ ν™”: μΈλ±μŠ€λŠ” WHERE μ‘°κ±΄μ—μ„œ μ‚¬μš©λ˜λŠ” 열에 λŒ€ν•œ 검색을 μ΅œμ ν™”ν•˜λŠ” 데 νš¨κ³Όμ μž…λ‹ˆλ‹€. μ΄λŠ” 특히 SELECT λ¬Έμ—μ„œ WHERE 절이 자주 μ‚¬μš©λ˜λŠ” 경우 μœ μš©ν•©λ‹ˆλ‹€.

 


 

B-트리(B-tree) ꡬ쑰λ₯Ό 기반으둜 ν•˜λŠ” 인덱슀

λ§Žμ€ λ°μ΄ν„°λ² μ΄μŠ€ κ΄€λ¦¬ μ‹œμŠ€ν…œ(DBMS)μ—μ„œλŠ” B-트리(B-tree) κ΅¬μ‘°λ₯Ό κΈ°λ°˜μœΌλ‘œ ν•˜λŠ” μΈλ±μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. B-νŠΈλ¦¬λŠ” λ°μ΄ν„°λ₯Ό νš¨μœ¨μ μœΌλ‘œ μ •λ ¬ν•˜κ³  νƒμƒ‰ν•˜κΈ° μœ„ν•œ νŠΈλ¦¬ κ΅¬μ‘°μ˜ λ°μ΄ν„° κ΅¬μ‘°λ‘œ, μžμ£Ό μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μΈλ±μŠ€μ˜ κΈ°λ³Έ κ΅¬μ‘° μ€‘ ν•˜λ‚˜μž…λ‹ˆλ‹€.


λŒ€ν‘œμ μœΌλ‘œ MySQL, PostgreSQL, Oracle, SQL Server λ“±μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œλŠ” B-트리 κΈ°λ°˜μ˜ μΈλ±μŠ€λ₯Ό κΈ°λ³ΈμœΌλ‘œ μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λͺ‡λͺ‡ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” νŠΉμ • μƒν™©μ΄λ‚˜ μš”ꡬ에 λ”°λΌ λ‹€λ₯Έ μΈλ±μŠ€ κ΅¬μ‘°λ₯Ό μ„ νƒν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

 

 

λ¬΄λ¦¬ν•˜κ²Œ λ§Žμ€ 인덱슀 μƒμ„±μ˜ 단점

κ·ΈλŸ¬λ‚˜ μΈλ±μŠ€λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λͺ‡ κ°€μ§€ κ³ λ € μ‚¬ν•­μ΄ μžˆμŠ΅λ‹ˆλ‹€. μΈλ±μŠ€λŠ” λ°μ΄ν„° μ‚½μž…, μˆ˜μ •, μ‚­μ œ μž‘업에 μ˜ν–₯을 λ―ΈμΉ  μˆ˜ μžˆμœΌλ©°, κ³Όλ„ν•œ μΈλ±μŠ€ μƒμ„±μ€ λ””μŠ€ν¬ κ³΅κ°„을 λ‚­λΉ„ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. μ μ ˆν•œ μΈλ±μŠ€ μ „λž΅μ„ μ„ νƒν•˜κ³  μœ μ§€λ³΄μˆ˜ν•˜λŠ” κ²ƒμ΄ μ€‘μš”ν•©λ‹ˆλ‹€.

  • table에 writeν•  λ•Œλ§ˆλ‹€ index도 λ³€κ²½ λ°œμƒ
  • 좔가적인 μ €μž₯ 곡간 차지

 

 

Covering Index (컀버링 μΈλ±μŠ€)

Covering IndexλŠ” 쿼리의 싀행을 μœ„ν•΄ ν•„μš”ν•œ λͺ¨λ“  데이터λ₯Ό 인덱슀 μžμ²΄μ—μ„œ μ œκ³΅ν•˜λŠ” 인덱슀의 ν˜•νƒœλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 즉, 컀버링 μΈλ±μŠ€λŠ” 쿼리의 κ²°κ³Όλ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•΄ λ””μŠ€ν¬μ—μ„œ ν…Œμ΄λΈ”λ‘œ μ΄λ™ν•˜μ§€ μ•Šκ³ λ„ 인덱슀만으둜 μ›ν•˜λŠ” 정보λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

일반적으둜 μΈλ±μŠ€λŠ” κ²€μƒ‰μ„ λΉ λ₯΄κ²Œ ν•˜κΈ° μœ„ν•œ λͺ©μ μœΌλ‘œ μ‚¬μš©λ˜μ§€λ§Œ, λ§Œμ•½ μΏΌλ¦¬μ—μ„œ μ„ νƒλœ μ—΄κ³Ό ν•„μš”ν•œ λ°μ΄ν„°κ°€ λͺ¨λ‘ μΈλ±μŠ€μ— ν¬ν•¨λ˜μ–΄ μžˆλ‹€λ©΄, ν…Œμ΄λΈ”을 μ‹€μ œλ‘œ μ‘°νšŒν•˜μ§€ μ•Šκ³ λ„ ν•„μš”ν•œ κ²°κ³Όλ₯Ό μ–»μ„ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ° κ²½μš°λ₯Ό μ»€λ²„링 μΈλ±μŠ€λΌκ³  λΆ€λ¦…λ‹ˆλ‹€.

  • 검색 μ„±λŠ₯ ν–₯상: ν…Œμ΄λΈ”에 λŒ€ν•œ λ””μŠ€ν¬ I/Oλ₯Ό ν”Όν•˜κ³  μΈλ±μŠ€λ§ŒμœΌλ‘œ μ›ν•˜λŠ” κ²°κ³Όλ₯Ό μ–»μ„ μˆ˜ μžˆμœΌλ―€λ‘œ κ²€μƒ‰ μ„±λŠ₯이 ν–₯μƒλ©λ‹ˆλ‹€.
  • 데이터 전솑 μ΅œμ†Œν™”: ν•„μš”ν•œ 데이터가 이미 μΈλ±μŠ€μ— μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— λΆˆν•„μš”ν•œ 데이터 전솑이 μ΅œμ†Œν™”λ˜μ–΄ λ„€νŠΈμ›Œν¬ λΉ„μš©κ³Ό λŒ€μ—­ν­μ„ μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

ν•΄μ‹œ μΈλ±μŠ€(Hash Index)

ν•΄μ‹œ μΈλ±μŠ€(Hash Index)λŠ” ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°λ₯Ό μ €μž₯ν•˜κ³  κ²€μƒ‰ν•˜λŠ” μΈλ±μŠ€ κ΅¬μ‘°μž…λ‹ˆλ‹€. ν•΄μ‹œ ν•¨μˆ˜λŠ” κ³ μœ ν•œ μž…λ ₯에 λŒ€ν•΄ κ³ μœ ν•œ ν•΄μ‹œ κ°’을 μƒμ„±ν•˜λŠ” ν•¨μˆ˜λ‘œ, μ΄ ν•΄μ‹œ κ°’을 μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°λ₯Ό μ €μž₯ν•˜κ³  κ²€μƒ‰ν•©λ‹ˆλ‹€. ν•΄μ‹œ μΈλ±μŠ€λŠ” νŠΉνžˆ λ“± κ°’이 μΌμΉ˜ν•˜λŠ” κ²½μš°μ— κ²€μƒ‰μ΄ λΉ λ₯΄κ²Œ μ΄λ£¨μ–΄μ§€λŠ” νŠΉμ„±μ΄ μžˆμŠ΅λ‹ˆλ‹€.

ν•΄μ‹œ 인덱슀의 νŠΉμ§•κ³Ό λ™μž‘ 방식

  1. 고속 검색
  2. λ“± κ°’ 처리: ν•΄μ‹œ μΈλ±μŠ€λŠ” λ“± κ°’(λ™μΌν•œ ν•΄μ‹œ κ°’)을 가진 데이터λ₯Ό μ²˜λ¦¬ν•  λ•Œ 유용
  3. λ“± κ°’ 좩돌: ν•΄μ‹œ ν•¨μˆ˜κ°€ μ„œλ‘œ λ‹€λ₯Έ μž…λ ₯에 λŒ€ν•΄ 같은 ν•΄μ‹œ 값을 생성할 수 μžˆλŠ” 좩돌이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. λ²”μœ„ κ²€μƒ‰μ˜ 어렀움: ν•΄μ‹œ μΈλ±μŠ€λŠ” νŠΉμ • 값에 λŒ€ν•œ 검색에 νš¨κ³Όμ μ΄μ§€λ§Œ, λ²”μœ„ 검색(예: "λ²”μœ„ λ‚΄μ˜ κ°’ μ°ΎκΈ°")μ—λŠ” μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 

μ£Όμ˜ν•  점은 ν•΄μ‹œ μΈλ±μŠ€λŠ” 주둜 λ“± κ°’ μ²˜λ¦¬κ°€ λ§Žμ€ κ²½μš°λ‚˜ νŠΉμ • 검색 νŒ¨ν„΄μ΄ 예츑 κ°€λŠ₯ν•œ κ²½μš°μ— μœ μš©ν•˜λ©°, λ°μ΄ν„°μ˜ 뢄포와 μΆ©λŒμ— λŒ€ν•œ 관리가 ν•„μš”ν•©λ‹ˆλ‹€. 일뢀 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” InnoDB와 같은 μŠ€ν† λ¦¬μ§€ μ—”μ§„μ—μ„œλŠ” ν•΄μ‹œ 인덱슀λ₯Ό μ§€μ›ν•˜μ§€ μ•Šκ±°λ‚˜ μ œν•œμ μœΌλ‘œ 지원할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 


An index is a data structure in a database that enhances the speed of data retrieval operations on a table by providing a quick and efficient way to locate and access specific rows based on the values in one or more columns.

 

'Computer Science > Database' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

25 NoSQL  (0) 2024.01.18
20 Normalization  (0) 2024.01.16
12 Trigger  (0) 2024.01.13
9 ORDER BY, GROUP BY (feat. HAVING)  (0) 2024.01.12
8 JOIN  (0) 2024.01.12

λŒ“κΈ€