Index

랏 뜨·2024λ…„ 12μ›” 4일

πŸ”Ž Overview

Β  인덱슀. 컴퓨터 κ΄€λ ¨ λ§Žμ€ λΆ„μ•Όμ—μ„œ 정말 학을 λ—„λ§ŒνΌ 듀어봀을 단어이닀.
μΈλ±μŠ€λŠ” 그만큼 μ—¬λŸ¬ κ³³μ—μ„œ 쓰이고 λŒ€κ°œ λΉ„μŠ·ν•˜κ²Œ μ‚¬μš©λ˜μ§€λ§Œ, λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œμ˜ μΈλ±μŠ€λŠ” 쑰금 더 μˆ™μ§€ν•΄μ•Ό ν•˜λŠ” λ‚΄μš©μ΄ λ§Žμ•˜λ‹€.
λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μΈλ±μŠ€λŠ” 무엇을 μ˜λ―Έν•˜λ©°, μ–΄λ–»κ²Œ μ‚¬μš©λ κΉŒ?


πŸ€” Index ?

  • 인덱슀(Index)λŠ” DB ν…Œμ΄λΈ”μ˜ νŠΉμ • μ—΄ ν˜Ήμ€ μ—΄ 쑰합에 λŒ€ν•΄ μƒμ„±λœ 데이터 ꡬ쑰이닀.
  • 데이터λ₯Ό 더 λΉ λ₯΄κ²Œ 찾을 수 있게 도와쀀닀.

πŸ› οΈ 인덱슀의 ꡬ쑰

1. B-트리

  • λŒ€λΆ€λΆ„μ˜ RDBMSμ—μ„œλŠ” B-트리둜 인덱슀λ₯Ό κ΅¬ν˜„
  • 검색, μ‚½μž…, μ‚­μ œ 연산을 O(log n) 으둜 μˆ˜ν–‰
  • μ΅œκ·Όμ—λŠ” B+트리둜 κ΅¬ν˜„ν•œ μΈλ±μŠ€λ„ μƒκΈ°λŠ” 좔세라고 함

2. ν•΄μ‹œ 인덱슀

  • ν•΄μ‹œ ν•¨μˆ˜λ‘œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 인덱슀
  • μ •ν™•ν•œ 일치 검색에 주둜 μ‚¬μš©
  • λ²”μœ„ κ²€μƒ‰μ—λŠ” μ ν•©ν•˜μ§€ μ•ŠμŒ

3. λΉ„νŠΈλ§΅ 인덱슀

  • κ°’μ˜ 쑰합을 λΉ„νŠΈλ§΅μœΌλ‘œ ν‘œν˜„
  • λΉ λ₯Έ 검색이 κ°€λŠ₯ν•˜μ—¬ μ„±λŠ₯이 μ’‹μŒ
  • μ—΄μ˜ 값이 μƒλŒ€μ μœΌλ‘œ 적은 κ²½μš°μ— 유용
    • ex) 성별, boolean으둜 된 κ°’...

4. ν΄λŸ¬μŠ€ν„°λ“œ 인덱슀

  • ν…Œμ΄λΈ”μ˜ 데이터λ₯Ό μ •λ ¬ν•˜μ—¬ μ €μž₯ν•˜λŠ” 인덱슀
  • κΈ°λ³Έ ν‚€κ°€ 주둜 μ‚¬μš©λ¨
  • ν΄λŸ¬μŠ€ν„°λ“œ μΈλ±μŠ€λŠ” ν•œ ν…Œμ΄λΈ”μ— 였직 ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•  수 있음

5. λ„Œν΄λŸ¬μŠ€ν„°λ“œ 인덱슀

  • λ°μ΄ν„°λŠ” μ •λ ¬λ˜μ§€ μ•Šκ³ , 포인터λ₯Ό 톡해 ν…Œμ΄λΈ”μ˜ 행을 μ°Έμ‘°ν•˜λŠ” 인덱슀
  • ν΄λŸ¬μŠ€ν„°λ“œ μΈλ±μŠ€μ™€ 달리 ν•œ ν…Œμ΄λΈ”μ— μ—¬λŸ¬ λ„Œν΄λŸ¬μŠ€ν„°λ“œ μΈλ±μŠ€κ°€ 생성될 수 있음

πŸ’Ύ 인덱슀의 μ’…λ₯˜μ™€ νŠΉμ„±

1. 고유 인덱슀

  • 쀑볡 값을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” 인덱슀
  • ν…Œμ΄λΈ”μ˜ κ³ μœ μ„±μ„ 보μž₯

2. λΉ„κ³ μœ  인덱슀

  • 쀑볡 값을 ν—ˆμš©ν•˜λŠ” 인덱슀

3. 닀쀑 μ—΄ 인덱슀

  • ν•˜λ‚˜μ˜ 열이 μ•„λ‹Œ, μ—¬λŸ¬ 열을 ν¬ν•¨ν•œ 인덱슀
  • μ—΄μ˜ μ‘°ν•©μœΌλ‘œ 검색이 ν•„μš”ν•  λ•Œ μ‚¬μš©

πŸ“Œ 인덱슀 μ‚¬μš©λ²•

// mysql κΈ°μ€€

1. 인덱슀 생성

CREATE TABLE MEMBER
(
id int unsigned not null primary key auto_increment,
user_name char(50) unique not null,
email char(100) not null
);
  • 이런 μ‹μœΌλ‘œ, ν…Œμ΄λΈ” 생성 μ‹œμ— 인덱슀λ₯Ό 생성할 수 있음

2. 인덱슀 μΆ”κ°€

ALTER TABLE MEMBER ADD UNIQUE INDEX(email);
  • ν…Œμ΄λΈ” 생성 후에도 이런 방식 λ“±μœΌλ‘œ 인덱슀λ₯Ό 섀정해쀄 수 있음

3. 인덱슀 μ‚­μ œ

ALTER TABLE MEMBER DROP INDEX email;
  • 이런 λ°©μ‹μœΌλ‘œ 인덱슀 μ‚­μ œ λ˜ν•œ κ°€λŠ₯ν•˜λ‹€.


🎭 인덱슀의 μž₯단점

1. μž₯점

  • 검색 μ„±λŠ₯ ν–₯상
    • ν…Œμ΄λΈ” 검색 μ‹œ λΉ λ₯Έ 속도λ₯Ό 제곡
  • μ •λ ¬ 및 필터링 μ„±λŠ₯ κ°œμ„ 
    • ν•΄λ‹Ή κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 쿼리의 μ„±λŠ₯ ν–₯상
      • ex) ORDER BY, GROUP BY, WHERE...
  • 쀑볡 데이터 제거
    • 고유 인덱슀만 ν•΄λ‹Ή
    • 쀑볡 데이터λ₯Ό λ°©μ§€

2. 단점

  • μΆ”κ°€ μ €μž₯ 곡간 μ†Œλͺ¨
    • ν…Œμ΄λΈ” 크기λ₯Ό μ¦κ°€μ‹œν‚€λ―€λ‘œ, 좔가적인 μ €μž₯ 곡간이 ν•„μš”
    • 데이터가 클 수둝, μ €μž₯ 곡간에 λŒ€ν•œ λΆ€λ‹΄ 증가
  • 검색 μ œμ™Έ μ„±λŠ₯ μ €ν•˜
    • κ²€μƒ‰μ—λŠ” λ›°μ–΄λ‚œ μ„±λŠ₯을 μžλž‘ν•˜μ§€λ§Œ, μ“°κΈ°κ°€ ν•„μš”ν•œ μ—°μ‚° μ‹œμ—λŠ” μ„±λŠ₯ κ°μ†Œ
      • ex) INSERT, UPDATE, DELETE
    • μ“°κΈ° μ—°μ‚° μ‹œμ—λŠ” 데이터가 μ¦κ°€ν•˜λ―€λ‘œ, μΈλ±μŠ€λ„ 좔가적인 κ°±μ‹  ν•„μš”
  • 인덱슀 μœ μ§€κ΄€λ¦¬
    • λ‹Ήμ—°μŠ€λŸ½μ§€λ§Œ μƒμ„±λœ μΈλ±μŠ€μ— λŒ€ν•œ μΆ”κ°€ μž‘μ—… ν•„μš”

🫣 인덱슀 ν™œμš© μ‹œ 주의 사항

  • μΈλ±μŠ€λŠ” 무쑰건적으둜 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” 것이 μ•„λ‹ˆκ³  였히렀 μ„±λŠ₯을 κ°μ†Œμ‹œν‚€λŠ” κ²½μš°λ„ μ‘΄μž¬ν•˜λ―€λ‘œ, 자주 κ²€μƒ‰λ˜λŠ” μ—΄μ—λ§Œ 인덱슀λ₯Ό μƒμ„±ν•˜λŠ” 것이 μ€‘μš”
  • μ‚¬μš©λ˜μ§€ μ•ŠλŠ” μΈλ±μŠ€λŠ” μ‚­μ œν•˜μ—¬ μ΅œμ ν™”

μ°Έκ³ ) OpenAI. (2024).ChatGPT(4o)[Large language model].https://chatgpt.com/

profile
기둝

0개의 λŒ“κΈ€