πΎ[Database] κ²μκΈ λͺ©λ‘ μ‘°ν - νμ΄μ§ μ²λ¦¬.
β 1οΈβ£ λΉν¨μ¨μ μΈ νμ΄μ§ μ²λ¦¬.
- βοΈ μλ² μ ν리μΌμ΄μ
λ΄μ λ©λͺ¨λ¦¬λ‘ λμ€ν¬μ μ μ₯λ λͺ¨λ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ , νΉμ νμ΄μ§λ§ μΆμΆνλ κ²μ λΉν¨μ¨μ μ.
- βοΈ λμ€ν¬ μ κ·Όμ λ©λͺ¨λ¦¬ μ κ·Όλ³΄λ€ λ리기 λλ¬Έμ.
- βοΈ λμ€ν¬ I/O λΉμ©
- βοΈ λμ€ν¬μ μ μ₯λ λ°μ΄ν°λ λ©λͺ¨λ¦¬ μ©λμ μ΄κ³Όν μ μμ.
- βοΈ Out of Memory(OOM)
- βοΈ μμ€ν
μμ μ¬μ© κ°λ₯ν λ©λͺ¨λ¦¬κ° λͺ¨λ μ¬μ©λμ΄ λ μ΄μ ν λΉν μ μλ μν©.
β 2οΈβ£ ν¨μ¨μ μΈ νμ΄μ§ μ²λ¦¬.
- βοΈ μμ€ν
μμ μ¬μ© κ°λ₯ν λ©λͺ¨λ¦¬κ° λͺ¨λ μ¬μ©λμ΄ λ μ΄μ ν λΉν μ μλ μν©.
- βοΈ Out of Memory(OOM)
- βοΈ λμ€ν¬ μ κ·Όμ λ©λͺ¨λ¦¬ μ κ·Όλ³΄λ€ λ리기 λλ¬Έμ.
- βοΈ λ°μ΄ν°λ² μ΄μ€μμ νΉμ νμ΄μ§μ λ°μ΄ν°λ§ λ°λ‘ μΆμΆνλ λ°©λ²μ΄ νμν¨.
- βοΈ νμ΄μ§ 쿼리
β 3οΈβ£ νμ΄μ§ λ°©μ.
- βοΈ νμ΄μ§ 쿼리
- βοΈ ν΄λΌμ΄μΈνΈ λλ μλΉμ€ νΉμ±μ λ°λΌ ν¬κ² λ κ°μ§λ‘ λλ¨
- βοΈ νμ΄μ§ λ²νΈ
- βοΈ ** 무ν μ€ν¬λ‘€**
π νμ΄μ§ λ²νΈ λ°©μ.
- βοΈ μ΄λν νμ΄μ§ λ²νΈκ° λͺ μμ μΌλ‘ μ§μ λ¨.
- βοΈ μνλ νμ΄μ§λ‘ μ¦μ μ΄λ κ°λ₯.
π 무ν μ€ν¬λ‘€ λ°©μ.
- βοΈ μ€ν¬λ‘€μ λ΄λ¦¬λ©΄ λ€μ λ°μ΄ν°κ° μ‘°νλ¨. β λ보기.
- βοΈ μ£Όλ‘ λͺ¨λ°μΌ νκ²½μμ μ¬μ©ν¨.
β 4οΈβ£ νμ΄μ§ λ²νΈ λ°©μ.
- βοΈ νμν μ 보
- βοΈ 1οΈβ£ Nλ² νμ΄μ§μμ Mκ°μ κ²μκΈ
- βοΈ 2οΈβ£ κ²μκΈμ κ°μ
- βοΈ νμ΄μ§ λ²νΈ νμ±νμ νμ.
- βοΈ μμ: νμ΄μ§ λΉ 30κ°μ κ²μκΈμ 보μ¬μ£Όκ³ , μ΄ 94κ°μ κ²μκΈμ΄ μλ€λ©΄, μ¬μ©μλ ν΄λΌμ΄μΈνΈ νλ©΄μμ 4λ² νμ΄μ§κΉμ§ μ΄λν μ μλ€λ μ¬μ€μ μΈμ§ν΄μΌ ν¨.
- βοΈ 3οΈβ£ Nλ² νμ΄μ§μμ Mκ°μ κ²μκΈμ μ‘°ννλ €λ©΄?
- βοΈ SQL offset, limitμ νμ©νμ¬ νμ΄μ§ 쿼리λ₯Ό ν μ μμ.
- βοΈ offset μ§μ λΆν°, limitκ°μ λ°μ΄ν° μ‘°ν.
- βοΈ 4οΈβ£ SELECT μΏΌλ¦¬λ‘ λ§λ€μ΄λ³΄λ©΄?
- βοΈ κ²μνλ³ κ²μκΈ λͺ©λ‘ μ΅μ μ μ‘°ν
- βοΈ
shard key = board_id
μ΄κΈ° λλ¬Έμ, λ¨μΌ μ€λμμ μ‘°νν μ μμ. - βοΈ
limit = M
κ°μ κ²μκΈ - βοΈ
offset = (Nλ² νμ΄μ§ - 1) * M
- βοΈ
N > 0
- βοΈ
- βοΈ
- βοΈ SQL QUERY
SELECT * FROM article // κ²μκΈ ν μ΄λΈ WHERE board_id = {board_id} // κ²μνλ³ ORDER BY created_at DESC // μ΅μ μ LIMIT {LIMIT} OFFSET {OFFSET}; // Nλ² νμ΄μ§μμ Mκ°
- βοΈ 1,200λ§ κ±΄μ μ μ λ°μ΄ν°μμ 30κ°μ κ²μκΈμ μ‘°ννλλ° 4μ΄κ° μμλμμ. μ μμ μΌλ‘ μλΉμ€νκΈ°μλ μ΄λ €μ΄ μν©μ.
- βοΈ
explain select * from article where board_id = 1 order by created_at desc limit 30 offset 90;
- βοΈ
type = ALL
β ν μ΄λΈ μ 체λ₯Ό μ½λλ€ (ν μ€μΊ) - βοΈ
Extras = Using where; Using filesort
β where μ λ‘ μ‘°κ±΄μ λν΄ νν°λ§,- βοΈ λ°μ΄ν°κ° λ§κΈ° λλ¬Έμ λ©λͺ¨λ¦¬μμ μ λ ¬μ μνν μ μμ΄μ, νμΌ(λμ€ν¬)μμ λ°μ΄ν°λ₯Ό μ λ ¬νλ
filesort
μν - βοΈ μ 체 λ°μ΄ν°μ λν΄ νν°λ§ λ° μ λ ¬νκΈ° λλ¬Έμ μμ£Ό ν° λΉμ©μ΄ λ κ².
- βοΈ λ°μ΄ν°κ° λ§κΈ° λλ¬Έμ λ©λͺ¨λ¦¬μμ μ λ ¬μ μνν μ μμ΄μ, νμΌ(λμ€ν¬)μμ λ°μ΄ν°λ₯Ό μ λ ¬νλ
- βοΈ κ²μνλ³ κ²μκΈ λͺ©λ‘ μ΅μ μ μ‘°ν
πββοΈ Query Plain
λ°μ΄ν°λ² μ΄μ€μμ 쿼리μ μν΄ λ°μ΄ν° μ κ·Όμ΄ μ€νλλ κ³ν λλ μ μ°¨ μ¬μ©λ².
explain {query}
β 5οΈβ£ μΈλ±μ€μ λν μ΄ν΄
π Intro
- βοΈ μΈλ±μ€(Index)λ λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² κ²μνκΈ° μν΄ μ¬μ©νλ λ°μ΄ν° ꡬ쑰.
- βοΈ μ± μ μμΈ(Index)κ³Ό λΉμ·ν κ°λ μΌλ‘, νΉμ λ°μ΄ν°λ₯Ό μ°ΎκΈ° μν΄ λͺ¨λ λ°μ΄ν°λ₯Ό μ²μλΆν° λκΉμ§ νμνμ§ μκ³ λ μνλ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ μ‘°νν μ μλλ‘ λμμ€.
β 6οΈβ£ μΈλ±μ€μ ν΅μ¬ κ°λ .
- βοΈ λΉ λ₯Έ κ²μ : ν μ΄λΈμμ νΉμ λ°μ΄ν°λ₯Ό λ λΉ λ₯΄κ² μ°Ύμ μ μμ.
- βοΈ μ λ ¬λ ꡬ쑰 : μΈλ±μ€λ μΌλ°μ μΌλ‘ B-Tree λλ Hash ꡬ쑰λ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ λ ¬ν¨.
- βοΈ μ‘°ν μ±λ₯ ν₯μ : WHERE, JOIN, BYμ κ°μ SQL μ°μ° μ μ±λ₯μ κ°μ ν¨.
- βοΈ κ³΅κ° μ°¨μ§ : μΈλ±μ€λ₯Ό μ μ§νκΈ° μν΄ μΆκ°μ μΈ μ μ₯ 곡κ°μ΄ νμν¨.
- βοΈ μ°κΈ° μ±λ₯ μ ν : INSERT, UPDATE, DELETE μμ μ μΈλ±μ€λ₯Ό μ λ°μ΄νΈν΄μΌ νλ―λ‘ μ°κΈ° μμ μ μ±λ₯μ΄ μ νλ μ μμ.
β 7οΈβ£ μΈλ±μ€μ μλ μ리.
- βοΈ λ°μ΄ν°λ² μ΄μ€λ ν μ΄λΈμ νΉμ 컬λΌ(μ΄)μ μΈλ±μ€λ₯Ό μμ±ν¨.
- βοΈ SQL 쿼리λ₯Ό μ€νν λ, μΈλ±μ€κ° μλ 컬λΌμ κΈ°μ€μΌλ‘ λ°μ΄ν°λ² μ΄μ€ μμ§μ μΈλ±μ€λ₯Ό λ¨Όμ μ‘°νν¨.
- βοΈ μΈλ±μ€λ₯Ό ν΅ν΄ λ°μ΄ν°μ μμΉλ₯Ό μ°Ύκ³ , ν΄λΉ μμΉμμ λ°μ΄ν°λ₯Ό κ°μ Έμ΄.
β 8οΈβ£ μΈλ±μ€μ μ’ λ₯.
1οΈβ£ μΌλ° μΈλ±μ€(B-Tree Index)
- βοΈ κ°μ₯ λ§μ΄ μ¬μ©λλ μΈλ±μ€.
- βοΈ μ»¬λΌμ κ°μ μ€λ¦μ°¨μ λλ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νμ¬ μ μ₯ν¨.
2οΈβ£ κ³ μ μΈλ±μ€(Unique Index)
- βοΈ μΈλ±μ€κ° μ§μ λ 컬λΌμ μ€λ³΅λ κ°μ κ°μ§ μ μμ.
- βοΈ PRIMARY KEYλ UNIQUE μ μ½ μ‘°κ±΄μ΄ ν¬ν¨λ κ²½μ° μλμΌλ‘ μμ±λ¨.
3οΈβ£ λ³΅ν© μΈλ±μ€(Composite Index)
- βοΈ λ κ° μ΄μμ 컬λΌμ κ²°ν©νμ¬ νλμ μΈλ±μ€λ₯Ό λ§λ¦.
- βοΈ λ³΅ν© μΈλ±μ€λ μ¬λ¬ 쑰건μ λμμ μ¬μ©ν λ μ μ©.
4οΈβ£ νν μ€νΈ μΈλ±μ€(Full-Text Index)
- βοΈ λ¬Έμμ΄ κ²μμ μ΅μ νλ μΈλ±μ€.
- βοΈ λλμ ν μ€νΈ λ°μ΄ν°λ₯Ό κ²μν λ μ¬μ©.
5οΈβ£ ν΄μ μΈλ±μ€(Hash Index)
- βοΈ κ°μ ν΄μ ν¨μλ‘ λ³ννμ¬ μ μ₯.
- βοΈ μ νν κ°μ λΉ λ₯΄κ² μ°Ύμ λ μ¬μ©.
β 9οΈβ£ μΈλ±μ€λ₯Ό μ¬μ©ν΄μΌ νλ κ²½μ°.
- βοΈ WHERE μ λ‘ νΉμ λ°μ΄ν°λ₯Ό μμ£Ό μ‘°νν λ.
- βοΈ JOIN μ°μ°μ΄ λΉλ²νκ² λ°μν λ.
- βοΈ ORDER BY λλ GROUP BY μ λ‘ μ λ ¬μ΄λ κ·Έλ£Ήνκ° νμν λ
- βοΈ μμ£Ό μ¬μ©λλ 컬λΌμ λν΄ λΉ λ₯Έ κ²μμ΄ νμν λ.
β 1οΈβ£0οΈβ£ μΈλ±μ€ μ¬μ© μ μ£Όμμ .
- βοΈ κ³Όλν μΈλ±μ€ μμ± : λ무 λ§μ μΈλ±μ€λ μ°κΈ° μ±λ₯μ μ νμν€κ³ , μΆκ°μ μΈ μ μ₯ 곡κ°μ μ°¨μ§ν¨.
- βοΈ λΆνμν μΈλ±μ€ : μμ£Ό μ¬μ©λμ§ μλ μΈλ±μ€λ μ€νλ € μ±λ₯ μ νλ₯Ό μ λ°ν μ μμ.
- βοΈ μΈλ±μ€ ννΈ λΉμ¨(Index Hit Rate) : μΏΌλ¦¬κ° μΈλ±μ€λ₯Ό μ λλ‘ νμ©νλμ§ λͺ¨λν°λ§ν΄μΌ ν¨.