λ² μ–΄_
TechBear
λ² μ–΄_
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (336)
    • Spring (33)
      • κ°œλ… (13)
      • Security (5)
      • μ‹€μŠ΅ (1)
      • ν† λΉ„ μŠ€ν”„λ§ (11)
    • JPA (6)
    • ν”„λ‘œμ νŠΈ 기둝 (24)
    • DB (13)
    • JAVA (18)
    • μ•Œκ³ λ¦¬μ¦˜ (50)
      • μœ ν˜•μ •λ¦¬ (8)
      • Baekjoon (21)
      • LeetCode (18)
    • λ””μžμΈνŒ¨ν„΄ (0)
    • κ°œλ°œμ„œμ  (79)
      • Effective Java (78)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (1)
    • 독후감 (4)
    • λ³΄μ•ˆ (2)
    • 운영체제(OS) (53)
      • 곡룑책 (53)
    • 컴퓨터 λ„€νŠΈμ›Œν¬ (28)
      • 컴퓨터 λ„€νŠΈμ›Œν¬ ν•˜ν–₯식 μ ‘κ·Ό (23)
    • 자료ꡬ쑰 (1)
    • DevOps (2)
    • μ•± 개발 (20)
      • μ•ˆλ“œλ‘œμ΄λ“œ μŠ€νŠœλ””μ˜€ (20)

λΈ”λ‘œκ·Έ 메뉴

    곡지사항

    인기 κΈ€

    νƒœκ·Έ

    • λ°±μ€€
    • ν† λΉ„μŠ€ν”„λ§
    • μŠ€λ ˆλ“œ
    • μ•Œκ³ λ¦¬μ¦˜
    • μ½”λ“œμ—…
    • λ°μ΄ν„°λ² μ΄μŠ€
    • ν•¨μˆ˜ν˜•μΈν„°νŽ˜μ΄μŠ€
    • μŠ€ν”„λ§
    • dfs
    • μžλ°”
    • C++
    • Spring
    • leetcode
    • jpa
    • μžλ°”8
    • μŠ€ν”„λ§μ‹œνλ¦¬ν‹°
    • 운영체제
    • java
    • BFS
    • μ΄νŽ™ν‹°λΈŒμžλ°”

    졜근 λŒ“κΈ€

    졜근 κΈ€

    ν‹°μŠ€ν† λ¦¬

    hELLO Β· Designed By μ •μƒμš°.
    λ² μ–΄_

    TechBear

    [DB] MySQL μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ 인덱슀
    DB

    [DB] MySQL μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ 인덱슀

    2023. 7. 26. 04:33

    πŸ” μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ 인덱슀 

       μΌλ°˜μ μœΌλ‘œ 인덱슀λ₯Ό μƒκ°ν•˜λ©΄ B-Tree 인덱슀λ₯Ό 생각할 것이닀. ν•˜μ§€λ§Œ μ—¬κΈ°μ„œλŠ” μ‚¬μš©μžκ°€ μˆ˜λ™μœΌλ‘œ μƒμ„±ν•˜λŠ” μΈλ±μŠ€κ°€ μ•„λ‹ˆλΌ InnoDB μŠ€ν† λ¦¬μ§€ μ—”μ§„μ—μ„œ μ‚¬μš©μžκ°€ 자주 μš”μ²­ν•˜λŠ” 데이터에 λŒ€ν•΄ μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” μΈλ±μŠ€μ΄λ‹€. μ‚¬μš©μžλŠ” innodb_adaptive_hash_index λ³€μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ 인덱슀 κΈ°λŠ₯을 ν™œμ„±ν™”ν•˜κ±°λ‚˜ λΉ„ν™œμ„±ν™”ν•  수 μžˆλ‹€. 

     

    ✏️ B-Tree의 ν•œκ³„

    B-TreeλŠ” μ‹€μ œ 데이터가 리프 λ…Έλ“œμ— μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— νŠΉμ • 데이터λ₯Ό μ°ΎκΈ° μœ„ν•΄ 루트 λ…Έλ“œ -> 브랜치 λ…Έλ“œ -> 리프 λ…Έλ“œμ˜ 경둜λ₯Ό κ±°μΉœλ‹€. λ§Œμ•½ 검색 μž‘μ—…μ„ λͺ‡μ²œ 개의 μŠ€λ ˆλ“œλ‘œ μ‹€ν–‰ν•˜λ©΄ CPU μ‚¬μš©λŸ‰μ΄ λŠ˜μ–΄λ‚˜κ³  μžμ—°νžˆ 쿼리의 μ„±λŠ₯은 λ–¨μ–΄μ§„λ‹€.

     

    ✏️ μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ μ—”λ±μŠ€μ˜ λ“±μž₯

    μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ μΈλ±μŠ€λŠ” 이런 B-Tree의 검색 μ‹œκ°„μ„ 쀄여주기 μœ„ν•΄ λ„μž…λœ κΈ°λŠ₯이닀. InnoDB μŠ€ν† λ¦¬μ§€ 엔진은 자주 μ½νžˆλŠ” 데이터 νŽ˜μ΄μ§€μ˜ ν‚€ 값을 μ΄μš©ν•΄ ν•΄μ‹œ 인덱슀λ₯Ό λ§Œλ“€κ³ , ν•„μš”ν•  λ•Œλ§ˆλ‹€ μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ 인덱슀λ₯Ό κ²€μƒ‰ν•΄μ„œ λ ˆμ½”λ“œκ°€ μ €μž₯된 데이터 νŽ˜μ΄μ§€λ₯Ό μ¦‰μ‹œ μ°Ύμ•„κ°ˆ 수 μžˆλ‹€. 

     

    ν•΄μ‹œ μΈλ±μŠ€λŠ” '인덱슀 ν‚€ κ°’'κ³Ό '데이터 νŽ˜μ΄μ§€ μ£Όμ†Œ'의 쌍으둜 κ΄€λ¦¬λœλ‹€. ν•΄μ‹œ μΈλ±μŠ€λŠ” ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•˜λ©°, λͺ¨λ“  B-Tree μΈλ±μŠ€μ— λŒ€ν•œ μΈλ±μŠ€κ°€ μ €μž₯λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— νŠΉμ • ν‚€ 값이 μ–΄λŠ μΈλ±μŠ€μ— μ†ν•œ 것인지 ꡬ뢄해야 ν•œλ‹€. λ”°λΌμ„œ 인덱슀 ν‚€ 값은 B-Tree 인덱슀의 κ³ μœ λ²ˆν˜Έμ™€ B-Tree 인덱슀의 μ‹€μ œ ν‚€ κ°’ μ‘°ν•©μœΌλ‘œ μƒμ„±λœλ‹€. 

     

    ✏️ μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ 인덱슀의 μ‚¬μš©

    μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ μΈλ±μŠ€λŠ” λ‹€μŒκ³Ό 같은 κ²½μš°μ— μ„±λŠ₯ ν–₯상에 도움이 λœλ‹€

    • λ””μŠ€ν¬μ˜ 데이터가 InnoDB 버퍼 ν’€ 크기와 λΉ„μŠ·ν•œ 경우 (λ””μŠ€ν¬ 읽기가 λ§Žμ§€ μ•Šμ€ 경우)
    • 동등 쑰건 검색(동등 비ꡐ와 IN μ—°μ‚°μž)이 λ§Žμ€ 경우
    • 쿼리가 데이터 μ€‘μ—μ„œ 일뢀 λ°μ΄ν„°μ—λ§Œ μ§‘μ€‘λ˜λŠ” 경우

     

    μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ μΈλ±μŠ€λŠ” 데이터 νŽ˜μ΄μ§€λ₯Ό λ©”λͺ¨λ¦¬λ‚΄μ—μ„œ μ ‘κ·Όν•˜λŠ” 것을 더 λΉ λ₯΄κ²Œ λ§Œλ“œλŠ” κΈ°λŠ₯으둜 데이터 νŽ˜μ΄μ§€λ₯Ό λ””μŠ€ν¬μ—μ„œ μ½μ–΄μ˜€λŠ” κ²½μš°κ°€ λΉˆλ²ˆν•œ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ—μ„œλŠ” μ•„λ¬΄λŸ° 도움이 λ˜μ§€ μ•ŠλŠ”λ‹€.

    • λ””μŠ€ν¬ 읽기가 λ§Žμ€ 경우
    • νŠΉμ • νŒ¨ν„΄μ˜ 쿼리가 λ§Žμ€ 경우(μ‘°μΈμ΄λ‚˜ LIKE νŒ¨ν„΄ 검색)
    • 맀우 큰 데이터λ₯Ό κ°€μ§„ ν…Œμ΄λΈ”μ˜ λ ˆμ½”λ“œλ₯Ό ν­λ„“κ²Œ μ½λŠ” 경우

    λ§ˆμ§€λ§‰μœΌλ‘œ μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ 인덱슀의 도움을 많이 λ°›μ„μˆ˜λ‘ ν…Œμ΄λΈ” μ‚­μ œ λ˜λŠ” λ³€κ²½ μž‘μ—…μ€ 더 치λͺ…적인 μž‘μ—…μ΄ λœλ‹€. λ§Œμ•½ ν…Œμ΄λΈ”μ„ λ³€κ²½ν•œλ‹€κ³  ν•˜λ©΄ InnoDB μŠ€ν† λ¦¬μ§€ 엔진은 이 ν…Œμ΄λΈ”μ΄ κ°€μ§„ λͺ¨λ“  데이터 νŽ˜μ΄μ§€μ˜ λ‚΄μš©μ„ μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ μΈλ±μŠ€μ—μ„œ μ œκ±°ν•΄μ•Ό ν•œλ‹€.  

     

    ✏️ MySQL μ„œλ²„ μƒνƒœ κ°’

    μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ 인덱슀λ₯Ό λ„μž…ν•˜λŠ” 것에 λŒ€ν•΄ 고민이 될 λ•ŒλŠ” MySQL μ„œλ²„μ˜ μƒνƒœ 값듀을 μ‚΄νŽ΄λ³΄λŠ” 것이 μ’‹λ‹€. 

    mysql > SHOW ENGINE INNODB STATUS\G

    μœ„μ˜ κ²°κ³ΌλŠ” μ΄ˆλ‹Ή 3.67(1.06 + 2.61)번의 검색이 μ‹€ν–‰λ˜μ—ˆκ³ , 그쀑 2.61λ²ˆμ€ μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ 인덱슀λ₯Ό μ‚¬μš©ν–ˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.  μ—¬κΈ°μ„œ 'searches'λŠ” 쿼리가 처리되기 μœ„ν•΄ λ‚΄λΆ€μ μœΌλ‘œ ν‚€ κ°’μ˜ 검색이 λͺ‡ 번 μ‹€ν–‰λ˜μ—ˆλŠ”μ§€ 가리킨닀. 

    μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ 인덱슀의 νš¨μœ¨μ€ 검색 νšŸμˆ˜κ°€ μ•„λ‹ˆλΌ 두 κ°’μ˜ λΉ„μœ¨κ³Ό μ–΄λŒ‘ν‹°λΈŒ ν•΄μ‹œ μΈλ±μŠ€κ°€ μ‚¬μš© 쀑인 λ©”λͺ¨λ¦¬ 곡간, 그리고 μ„œλ²„μ˜ CPU μ‚¬μš©λŸ‰μ„ μ’…ν•©ν•΄μ„œ νŒλ‹¨ν•΄μ•Ό ν•œλ‹€. 

    μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)
      'DB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
      • [DB] MySQL μ•„ν‚€ν…μ²˜: μŠ€ν† λ¦¬μ§€ μ—”μ§„
      • [DB] MySQL μ•„ν‚€ν…μ²˜: MySQLμ—”μ§„
      • [DB] μ—­ μ •κ·œν™”
      • [DB] BC μ •κ·œν™”
      λ² μ–΄_
      λ² μ–΄_
      Today I learned | 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 개발자

      ν‹°μŠ€ν† λ¦¬νˆ΄λ°”