βπ[Backend Development] κ°μ₯ μ€μν λ κ°μ§ μΈλ±μ€ μ ν.β
π Intro
λ°μ΄ν°λ² μ΄μ€μμ Indexλ κ²μ μ±λ₯μ μ΅μ ννλ ν΅μ¬ μμμ
λλ€.
κ·Έ μ€μμ Clustered Index(ν΄λ¬μ€ν°ν μΈλ±μ€)μ Secondary Index(보쑰 μΈλ±μ€, Non-Clustered Index)λ κ°μ₯ μ€μν λ κ°μ§ μΈλ±μ€ μ νμ
λλ€.
β 1οΈβ£ Clustered Index (ν΄λ¬μ€ν°ν μΈλ±μ€)
β κ°λ
- ν μ΄λΈμ λ°μ΄ν°λ₯Ό 물리μ μΌλ‘ μ λ ¬νλ μΈλ±μ€.
- ν ν μ΄λΈμ νλλ§ μ‘΄μ¬ν μ μμ.
- κΈ°λ³Έ ν€(Primary Key) μ μλμΌλ‘ μμ±λ¨.
- λ°μ΄ν° μμ²΄κ° μΈλ±μ€ νΈλ¦¬(B+ Tree) κ΅¬μ‘°λ‘ μ μ₯λ¨.
β νΉμ§
- β λ°μ΄ν° μμ²΄κ° μ λ ¬λ ννλ‘ μ μ₯λ¨.
- β Primary Key(κΈ°λ³Έ ν€)μ μλ μμ±λ¨.
- β λ²μ κ²μ(BETWEEN, ORDER BY)μ΄ λΉ λ¦.
- β ν μ΄λΈλΉ νλλ§ μ‘΄μ¬.
β μμ
CREATE TABLE users (
id INT PRIMARY KEY, -- μλμΌλ‘ Clusterd Index μμ±
name VARCHAR(100),
age INT
);
- μ ν μ΄λΈμμ idλ κΈ°λ³Έ ν€(Primary Key) μ΄λ―λ‘ μλμΌλ‘ Clustered Indexκ° μμ±λ©λλ€.
- μ¦, ν μ΄λΈμ λ°μ΄ν°κ° id κ°μ κΈ°μ€μΌλ‘ μ λ ¬λ μνλ‘ μ μ₯λ©λλ€.
β 2οΈβ£ Secondary Index (보쑰 μΈλ±μ€, Non-Clustered Index)
β κ°λ
- Clustered Indexμ λ³κ°λ‘ μΆκ°μ μΈ κ²μ μλλ₯Ό λμ΄κΈ° μν΄ μ¬μ©νλ μΈλ±μ€.
- λ°μ΄ν°μ λ³λλ‘ μ μ₯λλ©°, Clustered Indexμ κ°(Primary Key)μ μ°Έμ‘°.
- ν ν μ΄λΈμ μ¬λ¬ κ° μμ± κ°λ₯.
β νΉμ§
- β λ°μ΄ν° μ λ ¬μλ μν₯μ μ£Όμ§ μμ
- β ν μ΄λΈλΉ μ¬λ¬ κ° μμ± κ°λ₯
- β Clustered Indexλ₯Ό κΈ°λ°μΌλ‘ μΆκ°μ μΈ κ²μ μλ ν₯μ
- β λ²μ κ²μ보λ€λ νΉμ κ° κ²μ(WHERE 쑰건)μ μ ν©
β μμ
CREATE INDEX idx_users_name ON users(name);
- name 컬λΌμ 보쑰 μΈλ±μ€(Secondary Index)λ₯Ό μμ±νμ¬ μ΄λ¦ κ²μ μλλ₯Ό μ΅μ ν.
β 3οΈβ£ Clustered Index vs Secondary Index λΉκ΅
κ΅¬λΆ | Clustered Index | Secondary Index (Non-Clustered Index) |
---|---|---|
μ λ ¬ λ°©μ | λ°μ΄ν° μμ²΄κ° μΈλ±μ€ νΈλ¦¬μ μ λ ¬λ¨ | λ°μ΄ν° μ λ ¬μ μν₯μ μ£Όμ§ μμ |
μ μ₯ λ°©μ | λ°μ΄ν° μμ²΄κ° μΈλ±μ€ λ Έλμ μ μ₯λ¨ | μΈλ±μ€μ Primary Keyλ₯Ό μ μ₯ ν λ°μ΄ν° μ°Έμ‘° |
μλ | λ²μ κ²μ(BETWEEN, ORDER BY) μ΅μ | νΉμ κ° κ²μ(WHERE) μ΅μ |
κ°μ | ν ν μ΄λΈμ νλλ§ μ‘΄μ¬ | μ¬λ¬ κ° μ‘΄μ¬ κ°λ₯ |
μμ | PRIMARY KEY (id) | CREATE INDEX idx_name ON users(name) |
β 4οΈβ£ Clustered Index & Secondary Index κ²μ κ³Όμ .
π Clustered Index κ²μ κ³Όμ
SELECT * FROM users WHERE id = 100;
- Clustered Indexλ λ°μ΄ν° μμ²΄κ° μ λ ¬λ μνμ΄λ―λ‘, id = 100μ λ°λ‘ μ°Ύμ μ μμ.
- B+ Treeμμ ν λ²μ κ²μμΌλ‘ λ°μ΄ν°κΉμ§ λλ¬ β λΉ λ₯Έ μ‘°ν μλ.
π Secondary Index κ²μ κ³Όμ
SELECT * FROM users WHERE name = 'Alice';
- name 컬λΌμ Secondary Indexμ΄λ―λ‘, λ¨Όμ 보쑰 μΈλ±μ€λ₯Ό κ²μν ν, Primary Key κ°μ μ°Ύμ Clustered Indexμμ λ°μ΄ν° κ²μ.
- βSecondary Index β Clustered Indexβ λ λ¨κ³ κ²μ κ³Όμ μ΄ νμνμ¬ Clustered Indexλ³΄λ€ μλκ° μ½κ° λλ¦Ό.
β 5οΈβ£ μΈμ Clustered Index & Secondary Indexλ₯Ό μ¬μ©ν΄μΌ ν κΉ?
β Clustered Index μΆμ²
- PRIMARY KEYμ κ°μ΄ λ°μ΄ν° μ λ ¬μ΄ μ€μν κ²½μ°.
- ORDER BY, BETWEEN, RANGE QUERλ₯Ό μμ£Ό μ¬μ©ν΄μΌ νλ κ²½μ°.
β Secondary Index μΆμ²
- νΉμ 컬λΌμ WHERE 쑰건μΌλ‘ μμ£Ό κ²μν΄μΌ ν λ.
- JOIN λλ GROUP BY μ°μ°μ΄ λ§μ κ²½μ°.
- 보쑰μ μΈ κ²μ μλλ₯Ό λμ΄κ³ μΆμ λ.
π κ²°λ‘ .
- β Clustered Indexλ λ°μ΄ν° μ체λ₯Ό μ λ ¬νμ¬ μ μ₯νλ©°, Primary Keyμ μλμΌλ‘ μμ±λ¨
- β Secondary Indexλ μΆκ°μ μΈ κ²μ μ΅μ νλ₯Ό μν΄ μ¬μ©λλ©°, ν μ΄λΈλΉ μ¬λ¬ κ° μμ± κ°λ₯
- β λ²μ κ²μ(ORDER BY, BETWEEN)μ Clustered Indexκ° μ 리
- β νΉμ μ»¬λΌ κ²μ(WHERE 쑰건)μ Secondary Indexκ° μ 리.