B-Tree index
ꡬ쑰 λ° νΉμ±

κ·Έλ¦Όκ³Ό κ°μ΄ μΈλ±μ€μ ν€κ°μ λͺ¨λ μ λ ¬λμ΄ μμ§λ§, μ€μ λ°μ΄ν°κ° μ μ₯λ λ°μ΄ν° νμΌμλ μμμ μμλ‘ μ μ₯λμ΄ μλ€. λ μ½λκ° μμ λμ΄ λΉ κ³΅κ°μ΄ μκΈ°λ©΄ κ·Έλ€μ INSERTλ μμ λ 곡κ°μ μ¬νμ©νλλ‘ DBMSκ° μ€κ³λμ΄ μκΈ° λλ¬Έμ νμ INSERT μμλ‘ μ μ₯λμ§ μλλ€.
λλΆλΆμ RDMSλ μμμ μμλ‘ μ μ₯λλ€.
νμ§λ§ InnoDB ν μ΄λΈμμ λ μ½λλ ν΄λ¬μ€ν° λμ΄ λμ€ν¬μ μ μ₯λλ―λ‘ κΈ°λ³Έμ μΌλ‘ PK μμλ‘ μ λ ¬λμ΄ μ μ₯λλ€. λ€λ₯Έ DBMSμμλ ν΄λ¬μ€ν°λ§ κΈ°λ₯μ΄ μ ν μ¬νμ΄μ§λ§, InnoDBμμλ λν΄νΈλ‘ ν΄λ¬μ€ν°λ§ ν μ΄λΈμ΄ μμ±λλ€.
ν΄λ¬μ€ν°λ§μ΄λ λΉμ·ν κ°μ λͺ¨μμ μ μ₯νλ λ°©μμ μλ―Ένλ€.
μΈλ±μ€λ ν
μ΄λΈμ PK 컬λΌλ§ κ°μ§κ³ μμΌλ―λ‘ λλ¨Έμ§ μ»¬λΌμ μ½μΌλ €λ©΄ μ€μ λ°μ΄ν° νμΌμμ ν΄λΉ λ μ½λλ₯Ό μ°ΎμμΌ νλ€. μ΄λ₯Ό μν΄ μΈλ±μ€μ 리ν λ
Έλλ μ€μ λ°μ΄ν°κ° μ‘΄μ¬νλ λ°μ΄ν° νμΌμμ λ μ½λμ μ£Όμλ₯Ό κ°λλ€.
[MyISAMμ index table]

MyISAM μμ§μ κ²½μ°, ν
μ΄λΈ μμ± μ΅μ
μ λ°λΌ λ μ½λκ° ν
μ΄λΈμ INSERT λ μμμ΄κ±°λ λ°μ΄ν° νμΌ λ΄μ μμΉ(Offset)μ΄λ€.
MyISAMκ³Ό InnoDB μ€ν λ¦¬μ§ μμ§μ μΈλ±μ€μμ κ°μ₯ ν° μ°¨μ΄μ μ μΈμ»¨λ리 μΈλ±μ€λ₯Ό ν΅ν΄ λ°μ΄ν° νμΌμ λ μ½λλ₯Ό μ°Ύμκ°λ λ°©λ²μ μλ€. MyISAMμ μΈμ»¨λ리 μΈλ±μ€κ° 물리μ μΈ μ£Όμλ₯Ό κ°μ§λ λ°λ©΄, InnoDBλ PKλ₯Ό μ£Όμμ²λΌ μ¬μ©νκΈ° λλ¬Έμ λ Όλ¦¬μ μΈ μ£Όμλ₯Ό κ°μ§λ€κ³ λ³Ό μ μλ€.
[InnoDBμ index table]

κ·Έλμ InnoDBμμ μΈλ±μ€λ₯Ό ν΅ν΄ λ μ½λλ₯Ό μ‘°νν λ, λ°μ΄ν° νμΌμ λ°λ‘ μ°Ύμκ°μ§ λͺ»νλ€.
κ·Έλ¦Όκ³Ό κ°μ΄ μΈλ±μ€μ μ μ₯λΌ μλ PK κ°μ μ΄μ©ν΄ PK μΈλ±μ€λ₯Ό ν λ² λ κ²μν ν, PK μΈλ±μ€μ 리ν νμ΄μ§μ μ μ₯λΌ μλ λ μ½λλ₯Ό μ½λλ€. μ¦, InnoDB μμ§μ λͺ¨λ μΈμ»¨λ리 μΈλ±μ€ κ²μμμ μ€μ λ μ½λλ₯Ό μ½κΈ° μν΄μλ λ°λμ PKλ₯Ό μ μ₯νκ³ μλ B-Treeλ₯Ό λ€μ νλ² κ²μν΄μΌ νλ€.
μ¦, μΈμ»¨λ리 μΈλ±μ€κ° PKμ κ°μ μ μ₯νκ³ μλ€. (μ΄μ€ μΈλ±μ€ νμ λ°©μ)
μΈμ»¨λ리 μΈλ±μ€μμ 쑰건μ λ§λ PKλ₯Ό μ°Ύλλ€.
μ°Ύμ PKλ‘ ν΄λ¬μ€ν°λ μΈλ±μ€λ₯Ό κ²μνμ¬ μ€μ λ°μ΄ν°λ₯Ό μ‘°ννλ€.
λ§μ½, email 컬λΌμ΄ μΈλ±μ€λ‘ μ€μ λμ΄ μμΌλ©΄
λ¨Όμ idx_email μΈλ±μ€μμ where 쑰건μ ν΄λΉνλ id(PK)λ₯Ό μ°Ύλλ€.
μ°Ύμ id(PK) κ°μΌλ‘ νλΌμ΄λ¨Έλ¦¬ μΈλ±μ€λ₯Ό ν΅ν΄ μ€μ λ°μ΄ν°λ₯Ό μ‘°ννλ€.
MyISAM μΈλ±μ€ ꡬ쑰μ λΉκ΅ν΄ 보면, μ΄ κ΅¬μ‘°λ μ±λ₯μ΄ λ¨μ΄μ§ κ²μ²λΌ 보μ΄μ§λ§ κ°κ° μ₯λ¨μ μ κ°μ§κ³ μλ€.
MyISAM ν μ΄λΈμ μ μ₯λλ λ μ½λλ λͺ¨λ
ROWIDλΌλ 물리μ μΈ μ£Όμ κ°μ κ°λλ€.
λ μμ§μ κ°μ₯ ν° μ°¨μ΄μ μ μΈμ»¨λ리 μΈλ±μ€λ₯Ό ν΅ν΄ λ°μ΄ν° νμΌμ λ μ½λλ₯Ό μ°Ύμκ°λ€λ κ²μ΄λ€.
μΈλ±μ€ ν€ μΆκ°
ν μ΄λΈμ λ μ½λλ₯Ό λ³κ²½νλ κ²½μ°, μΈλ±μ€ ν€ μΆκ°λ μμ μμ μ΄ λ°μνλ€.
μΈλ±μ€ ν€ μΆκ°/μμ κ° μ΄λ»κ² μ²λ¦¬λλμ§ μλ€λ©΄ 쿼리 μ±λ₯μ μμΈ‘νκ³ μ£Όμν΄μΌ ν μ λ μ μ μμ κ²μ΄λ€.
μλ‘μ΄ ν€ κ°μ΄ B-Treeμ μ μ₯λ λ ν μ΄λΈμ μ€ν λ¦¬μ§ μμ§μ λ°λΌμ μλ‘μ΄ ν€ κ°μ΄ μ¦μ μΈλ±μ€μ μ μ₯λ μ μκ³ κ·Έλ μ§ μμ μ μλ€.
μ μ₯ μμΉκ° κ²°μ λλ©΄ λ μ½λμ ν€ κ°κ³Ό λμ λ μ½λμ μ£Όμ μ 보λ₯Ό 리ν λ
Έλμ μ μ₯νλ€.
리ν λ Έλκ° κ°λ μ°¨μ μ μ₯ν μ μλ€λ©΄ 리ν λ Έλμμ λΆλ¦¬(μ€νλ¦Ώ)μ΄ λ°μνλλ°, μ΄λ κ² μ¬μ‘°μ νλ κ³Όμ μ μμ λΈλμΉ λ ΈλκΉμ§ μ²λ¦¬ λ²μκ° λμ΄μ§κΈ° λλ¬Έμ B-Treeλ μλμ μΌλ‘ μ°κΈ° μμ μ λΉμ©μ΄ λ§μ΄ λ λ€.
μ€μν κ²μ λΉμ©μ λλΆλΆμ΄ λ©λͺ¨λ¦¬μ CPUμμ μ²λ¦¬νλ μκ°μ΄ μλλΌ λμ€ν¬λ‘λΆν° μΈλ±μ€ νμ΄μ§λ₯Ό μ½κ³ μ°κΈ°λ₯Ό ν΄μΌ ν΄μ 걸리λ μκ°μΈ disk I/Oμ΄λ€.
B-Tree μ°κΈ° μμ μ λ°μνλ λμ€ν¬ I/Oλ μλμ κ°μ μ μλ€.
μλ‘μ΄ ν€ μ½μ μ 리ν λ Έλ μ½κΈ°
리ν λ Έλκ° κ°λ μ°¨μ μ€νλ¦Ώ μμ
λΆν λ λ Έλλ₯Ό λμ€ν¬μ write
μμ λΈλμΉ λ Έλ κ°±μ
μ΄λ¬ν μ΄μ λ‘ B-Tree μΈλ±μ€λ μ½κΈ° μμ μ μ΅μ νλμ΄ μμΌλ©° μ°κΈ° μμ μ μλμ μΌλ‘ λΉμ©μ΄ λ§μ΄ λ°μνλ€.
λ°λΌμ λΆνμν μΈλ±μ€λ₯Ό λ§λ€λ©΄ μ°κΈ° μ±λ₯μ΄ ν¬κ² μ νλ μ μμ΄, μΈλ±μ€ μ€κ³ μ μ΄λ¬ν λΆλΆλ€μ κ³ λ €ν΄μΌ νλ€.
μΈλ±μ€ ν€ μμ
ν€ μμ λ κ°λ¨νλ€. ν€ κ°μ΄ μ μ₯λ 리ν λ Έλλ₯Ό μ°Ύμμ λ§ν¬λ§ νλ©΄ λμ΄λ€.
μμ λ§νΉλ μΈλ±μ€ ν€ κ³΅κ°μ κ·Έλλ‘ λκ±°λ μ¬νμ©ν μ μλ€. λ§νΉ μμ
λν disk writeκ° νμν΄μ μ΄ λν disk I/Oκ° νμν μμ
μ΄λ€.
μΈλ±μ€ ν€ λ³κ²½
μΈλ±μ€μ ν€ κ°μ κ°μ λ°λΌ 리ν λ Έλμ μμΉκ° κ²°μ λλ€. κ·Έλμ ν€ κ°μ΄ λ³κ²½λλ κ²½μ° λ¨μν ν€ κ°λ§ λ³κ²½νλ κ²μ λΆκ°λ₯νλ€.
B-Treeμμ ν€ κ° λ³κ²½μ λ¨Όμ ν€λ₯Ό μμ νκ³ λ€μ μλ‘μ΄ ν€ κ°μ μΆκ°νλ λ°©μμΌλ‘ μ²λ¦¬λλ€. μμμ μ€λͺ
ν μΆκ°/μμ μμ
μ΄ μ μ°¨λλ‘ μ²λ¦¬λκΈ° λλ¬Έμ μ΄ μμλ disk I/Oκ° λ°μνλ€.
μΈλ±μ€ ν€ κ²μ
B-Treeμμ μΆκ°/μμ /λ³κ²½κ³Ό κ°μ λ¬΄κ±°μ΄ λΉμ©μ κ°λΉνλ©΄μ μΈλ±μ€λ₯Ό ꡬμΆνλ μ΄μ λ λ°λ‘ λΉ λ₯Έ κ²μμ΄λ€.
λ£¨νΈ λ
Έλ β λΈλμΉ λ
Έλ β 리ν λ
ΈλκΉμ§ μ΄λνλ©΄μ λΉκ΅ μμ
μ μννλλ°, μ΄ κ³Όμ μ βνΈλ¦¬ νμβ μ΄λΌκ³ νλ€.
νΈλ¦¬ νμμ selectμμλ§ μ¬μ©νλ κ²μ΄ μλλΌ update, deleteλ₯Ό μ²λ¦¬νκΈ° μν΄ ν΄λΉ λ μ½λλ₯Ό λ¨Όμ κ²μν΄μΌ νλ κ²½μ°μλ μ¬μ©λλ€.
μΈλ±μ€ κ²μμ ν€ κ°μ μλΆλΆμ΄ μΌμΉνλ κ²½μ°μ μ¬μ©ν μ μλ€. λΆλ±νΈ(<, >) λΉκ΅ 쑰건μμλ νμ©ν μ μμ§λ§, ν€ κ°μ λ·λΆλΆλ§μ κ²μνλ μ©λλ‘λ μ¬μ©ν μ μλ€.
μΈλ±μ€ κ²μμμ μ€μν κ²μ ν€ κ°μ λ³ν, μ¦ μ‘°ννλ €λ λ°μ΄ν°κ° λ³νλλ€λ©΄ λΉ λ₯Έ κ²μ κΈ°λ₯μ μ¬μ©ν μ μλ€. κ·Έ μ΄μ λ ν¨μλ μ°μ°μ μνν κ²°κ³Όλ μΈλ±μ€μ μ‘΄μ¬νλ κ°μ΄ μλκΈ° λλ¬Έμ΄λ€. κ·Έλμ μΈλ±μ€λ₯Ό νμ§ μλ λνμ μΈ κ²½μ°μλ ν¨μ λλ μ°μ°μλ₯Ό μ¬μ©νλ κ²½μ°κ° ν¬ν¨λλ κ²μ΄λ€.
Q&A
ν΄μ μΈλ±μ€ λμ B-Treeλ₯Ό μ¬μ©νλ μ΄μ
λ²μ κ²μ μ§μ
B-Treeλ λ°μ΄ν°λ₯Ό μ λ ¬λ μνλ‘ μ μ§νλ―λ‘ λΆλ±νΈ μ°μ°(<, >, between λ±)μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μμ§λ§, ν΄μ μΈλ±μ€λ λλ± λΉκ΅μλ§ μ΅μ ν λμ΄ μλ€. λ²μ κ²μμ΄λ μ λ ¬λμ§ μμ κ²°κ³Όλ₯Ό κ°μ Έμ€κΈ° μν΄μλ λ§μ λμ€ν¬ I/Oλ₯Ό μ λ°ν μ μλ€.
μ λ ¬κ³Ό μμ°¨ μ κ·Ό
ν΄μλ μ λ ¬ μμκ° λ³΄μ₯λμ§ μμ order by μ μΆκ° μ λ ¬ μμ μ΄ νμν μ μλ€.
B-Treeλ μ΄λ―Έ λ°μ΄ν°κ° μ λ ¬λμ΄ μμ΄μ order/group by λ±μ΄ ν¨μ¨μ μ΄λ€.
λΆλΆ κ²μ(Prefix Search)
ν΄μλ μμ ν ν€ κ°μ΄ μ‘΄μ¬ν΄μΌλ§ κ²μμ΄ κ°λ₯νλ€. (LIKE 'Kim%'κ°μ κ²μμ΄ λΉν¨μ¨μ )
B-Treeλ ν€μ μΌλΆλΆλ§μΌλ‘ κ²μμ΄ κ°λ₯νλ€. (LIKE 'Kim%'κ°μ ν¨ν΄ κ²μ ν¨μ¨μ )
λμ€ν¬ I/O
ν΄μλ ν€λ§λ€ λλ€ν μμΉ μ κ·ΌμΌλ‘ λμ€ν¬ I/O λ§μ΄ λ°μ
B-Treeλ νλμ λ Έλμ μ¬λ¬ ν€λ₯Ό μ μ₯ν μ μλ ꡬ쑰μ νΉμ±μΌλ‘ I/O ν¨μ¨μ±μ λμ΄λλ° κΈ°μ¬
Last updated