π§· μΈλ±μ€ ꡬ쑰
ποΈ μΈλ±μ€ νλ
μ¨λΌμΈ νΈλμμ μ²λ¦¬(OLTP) μμ€ν μμλ μλμ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² κ²μνλ κ²μ΄ μ€μνλ€. λ°λΌμ λκ·λͺ¨ ν μ΄λΈμμ μλμ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ κ²μν μ μλλ‘ μΈλ±μ€λ₯Ό μ΅μ ννλ νλμ΄ νμμ μ΄λ€. μΈλ±μ€ μ€μΊ κ³Όμ μμ μ±λ₯μ κ²°μ νλ μμλ μ¬λ¬ κ°μ§κ° μμ§λ§, ν΅μ¬μ μΌλ‘ κ³ λ €ν΄μΌ ν λ κ°μ§ μμλ λ€μκ³Ό κ°λ€.
βοΈ ν΅μ¬ μμ
- μΈλ±μ€ μ€μΊ ν¨μ¨ν νλ
- μΈλ±μ€ μ€μΊ κ³Όμ μμ λΆνμν μ°μ°μ μ΅μννλ κ²μ΄ μ€μνλ€.
- μΈλ±μ€ μ λ ¬ λ°©μκ³Ό μ κ·Ό λ°©μμ μ΅μ ννμ¬ μ€μΊ νμλ₯Ό μ€μ΄λ κ²μ΄ ν΅μ¬μ΄λ€.
- λλ€ μ‘μΈμ€ μ΅μν νλ
- μΈλ±μ€ μ€μΊ ν ν μ΄λΈ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ λ λλ€ I/Oλ₯Ό μ΅μνν΄μΌ νλ€.
- ν μ΄λΈ μ κ·Ό νμλ₯Ό μ€μ΄λ©΄ λμ€ν¬ I/O λΆλ΄μ μ€μΌ μ μμ΄ μ±λ₯ ν₯μμ μ§μ μ μΈ μν₯μ λ―ΈμΉλ€.
βοΈ λλ€ μ‘μΈμ€ μ΅μνκ° μ€μνκ°?
λ°μ΄ν°λ² μ΄μ€ μ±λ₯μ΄ μ νλλ μ£Όμ μμΈμ λμ€ν¬ I/O λλ¬Έμ΄λ€. νΉν OLTP μμ€ν
μμλ μΈλ±μ€λ₯Ό νμ©ν κ²μμ΄ λ§μΌλ―λ‘, λλ€ I/Oκ° μ±λ₯ μ νμ μ£Όμ μμΈμ΄ λλ€. μ¦, SQLνλμ ν΅μ¬μ λλ€ μ‘μΈμ€ μ΅μν νλ κ²
μ΄λΌκ³ ν μ μλ€.
λ°λΌμ μΈλ±μ€ νλμ ν΅ν΄ λΆνμν ν μ΄λΈ μ‘μΈμ€λ₯Ό μ€μ΄κ³ λλ€ I/Oλ₯Ό μ΅μννλ κ²μ΄ μ±λ₯ μ΅μ νμ ν΅μ¬ μ λ΅μ΄λ€.
ποΈ μΈλ±μ€ ꡬ쑰
μΈλ±μ€λ λμ©λ ν μ΄λΈμμ νμν λ°μ΄ν°λ§ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ μ‘μΈμ€ νκΈ° μν΄ μ¬μ©νλ κ°μ²΄(Object)μ΄λ€.
1. μΈλ±μ€ κΈ°λ³Έ ꡬ쑰
μ¬λ¬ μ’ λ₯μ μΈλ±μ€ μ€ κ°μ₯ μΌλ°μ μΌλ‘ μ¬μ©λλ B * Tree μΈλ±μ€ ꡬ쑰λ 루νΈ(Root), λΈλμΉ(Branch), κ·Έλ¦¬κ³ λ¦¬ν(Leaf) λΈλ‘μΌλ‘ ꡬμ±λλ€.
- λ£¨νΈ λ° λΈλμΉ λΈλ‘
- νμ λ Έλ λΈλ‘μ μ κ·ΌνκΈ° μν μ£Όμ μ 보 (DBA, Data Block Address) μ 보λ₯Ό κ°κ³ μλ€.
- νΉλ³ν μνΈλ¦¬μΈ Leftmost Child (LMC)κ° μ‘΄μ¬νλλ°, κ°μ₯ μΌμͺ½ 첫 λ²μ§Έ λ μ½λμ΄κ³ μμ λ
Έλ μ€μ κ°μ₯ μΌμͺ½ λμ μμΉν λΈλ‘μ κ°λ¦¬ν¨λ€. LMCλ λͺ
μμ μΈ ν€ κ°μ κ°μ§ μλλΌλ
ν€ κ°μ κ°μ§ 첫λ²μ§Έ μνΈλ¦¬λ³΄λ€ μμ κ°
μ μλ―Έλ₯Ό κ°λλ€.
- 리ν λΈλ‘
- μΈλ±μ€ ν€ μ»¬λΌ κ°κ³Ό ν΄λΉ κ°μ κ°μ§ ν μ΄λΈ λ μ½λλ₯Ό μ°ΎκΈ° μν ROWID μ 보λ₯Ό μ μ₯νλ€.
- 리ν λΈλ‘μ νμ ν€ μ»¬λΌ μμΌλ‘ μ λ ¬λμ΄ μμ΄, νΉμ λ²μ λ΄μμ μ°μλ κ°μ λΉ λ₯΄κ² κ²μν μ μλ λ²μ μ€μΊ(Range Scan) μ΄ κ°λ₯νλ€. μΈλ±μ€ ν€κ°μ΄ κ°μλλ ROWID μμΌλ‘ μ λ ¬λμ΄ μλ€.
βοΈ λ²μ μ€μΊ
ν μ΄λΈμ μ²μλΆν° λκΉμ§ λͺ¨λ λ μ½λλ₯Ό μ½μ΄μΌ μμ ν κ²°κ³Όμ§ν©μ μ»μ μ μμ§λ§, μΈλ±μ€λ ν€ κ°μ΄ μ λ ¬λμ΄ μκΈ° λλ¬Έμ νΉμ λ²μ λ΄μμ μ°μλ κ°μ ν¨μ¨μ μΌλ‘ κ²μν μ μλ€. νΉμ μμΉμμ μ€μΊμ μμν΄ κ²μ 쑰건μ μΌμΉνμ§ μλ κ°μ λ§λλ μκ° λ©μΆ μ μκΈ° λλ¬Έμ μΈλ±μ€λ₯Ό ν΅ν΄μλ λ²μ μ€μΊμ΄ κ°λ₯νλ€.
λ°λ©΄, μΌλ°μ μΈ ν ꡬ쑰 ν μ΄λΈμ λ°μ΄ν°κ° 물리μ μΌλ‘ μ λ ¬λμ΄ μμ§ μμΌλ―λ‘ λ²μ μ€μΊμ΄ μ΄λ ΅λ€. μ λ ¬ μνκ° μ μ§λλλ‘ μ¬μ©μκ° λ°μ΄ν°λ₯Ό μ λ ₯νλ€ νμ¬λ, μ΅ν°λ§μ΄μ κ° μ΄λ₯Ό κ·Έκ²μ μ λ’°ν΄ ν μ΄λΈμμ λ²μ μ€μΊμ΄ μΌμ΄λλλ‘ μ€νκ³νμ μ립νμ§ μλλ€. λ¨, IOT(index-organized table)λ νΉμ μ»¬λΌ μμΌλ‘ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° λλ¬Έμ λ²μ μ€μΊμ΄ κ°λ₯νλ€.
2. μΈλ±μ€μ ν μ΄λΈ κ°μ κ΄κ³
μΌλΆ DBMSμμλ κ°μ΄ NULL μ¬λΆμ κ΄κ³μμ΄ μΈλ±μ€μ μ μ₯νλ λ°λ©΄, Oracleμ μΈλ±μ€ κ΅¬μ± μ»¬λΌμ κ°μ΄ λͺ¨λ NULLμΈ λ μ½λλ μ μ₯νμ§ μλλ€. μ¦, μΈλ±μ€ κ΅¬μ± μ»¬λΌμ κ°μ΄ μ λΆ NULLμ΄ μλ κ²½μ°, μΈλ±μ€μ ν μ΄λΈ λ μ½λλ 1:1 λμκ΄κ³λ₯Ό κ°λλ€. (λ¨, ν΄λ¬μ€ν° μΈλ±μ€λ 1:M κ΄κ³) λν, λΈλμΉμ μ μ₯λ λ μ½λ μλ ν΄λΉ λΈλμΉμ νμ λΈλ‘ μμ μΌμΉνλ€.
μμμ μΈκΈνλ―μ΄ μΈλ±μ€ 리νμ λ μ½λμ ν μ΄λΈ λ μ½λλ 1:1 κ΄κ³μ΄λ©°, μ΄λ€μ ν€ κ°λ λμΌνλ€. λ°λΌμ ν μ΄λΈ λ μ½λμμ κ°μ΄ κ°±μ λλ©΄, λμνλ μΈλ±μ€ ν€ κ°λ ν¨κ» κ°±μ (delete & insert)λλ€.
λ°λ©΄, 리ν λ Έλμ μνΈλ¦¬ ν€ κ°μ΄ κ°±μ λλλΌλ λΈλμΉ λ ΈλκΉμ§ κ°μ΄ λ³κ²½λμ§ μλλ€. λΈλμΉ λΈλ‘μ μμΉν μνΈλ¦¬λ νμ λ Έλ λΈλ‘ μ€ μμ μ ν€ κ°κ³Ό κ°κ±°λ ν° κ°μ κ°μ§ μμμ ν¬μΈν νλλ°, κ·Έ ν€ κ°μ μμ λ Έλ μ μ²΄κ° ν¬ν¨νλ κ°μ λ²μλ₯Ό λνλ΄κΈ° λλ¬Έμ΄λ€. λ°λΌμ, νμ λ Έλμ 첫 λ²μ§Έ λ μ½λμ μ νν μΌμΉνμ§ μμ μ μλ€. μ°Έκ³ λ‘, λΈλμΉ λ Έλμ κ°±μ μ μΈλ±μ€ λΆν κ³Όμ μμ μλ‘μ΄ λΈλ‘μ΄ μΆκ°λκ±°λ μμ λ λλ§ λ°μνλ€.
- 리ν λ
Έλ
- 리ν λ Έλμμ μΈλ±μ€ λ μ½λμ ν μ΄λΈ λ μ½λ κ°μλ 1:1 κ΄κ³
- 리ν λ Έλμμ ν€ κ°κ³Ό ν μ΄λΈ λ μ½λ ν€ κ°μ μλ‘ μΌμΉ
- λΈλμΉ λ
Έλ
- λΈλμΉ λ Έλμμ λ μ½λ κ°μλ νμ λΈλ‘ κ°μμ μΌμΉ
- λΈλμΉ λ Έλμμ ν€ κ°μ νμ λ Έλκ° κ°λ κ°μ λ²μλ₯Ό μλ―Έ
μ΄λ¬ν μΈλ±μ€ ꡬ쑰μ νΉμ§μ λͺ νν μ΄ν΄νλ©΄ μΈλ±μ€ νμ κ³Όμ μ λ³΄λ€ μ½κ² νμ ν μ μλ€.
3. ROWID
ROWIDλ ν μ΄λΈ λ μ½λμ 물리μ μμΉ μ 보λ₯Ό λνλ΄λ pseudo 컬λΌμΌλ‘, μ€μ ν μ΄λΈμ μ μ₯λλ κ°μ΄ μλλΌ, μΈλ±μ€μ λ°μ΄ν° λΈλ‘ ν€λμ μ‘΄μ¬νλ μ 보λ₯Ό κΈ°λ°μΌλ‘ λμ μΌλ‘ μμ±λλ€.
β κ΅¬μ± μμ
- ROWID = λ°μ΄ν° λΈλ‘ μ£Όμ + λ‘μ° λ²νΈ
- λ°μ΄ν° λΈλ‘ μ£Όμ (DBA) = λ°μ΄ν° νμΌ λ²νΈ + λΈλ‘ λ²νΈ
- λΈλ‘ λ²νΈ : λ°μ΄ν° νμΌ λ΄μμ λΆμ¬ν μλμ μλ²
- λ‘μ° λ²νΈ : λΈλ‘ λ΄ λ μ½λ μλ²
μ΄μ²λΌ ROWIDμλ λ°μ΄ν° νμΌ λ²νΈ, λΈλ‘ λ²νΈ, λ‘μ° λ²νΈ λ± ν μ΄λΈ λ μ½λμ 물리μ μμΉ μ λ³΄κ° ν¬ν¨λλ©°, μ΄ μ 보λ ν μ΄λΈ μ체μ μ μ₯λλ κ²μ΄ μλλΌ μΈλ±μ€μ μ μ₯λλ€. λ°λΌμ ROWIDλ₯Ό μΆλ ₯ν μλ μμ§λ§, μ€μ ν μ΄λΈ λ°μ΄ν°λ‘ μ‘΄μ¬νμ§ μλλ€.
μΈλ±μ€λ₯Ό μ¬μ©νμ§ μλ 쿼리μμ ROWIDκ° μꡬλ κ²½μ°, λ°μ΄ν° λΈλ‘ ν€λμ μ μ₯λ μ€λΈμ νΈ λ° λ°μ΄ν° νμΌ λ²νΈ, μλμ λΈλ‘ λ²νΈμ λ μ½λμ μ¬λ‘― λ²νΈλ₯Ό νμ©νμ¬ λμ μΌλ‘ κ°κ³΅ν΄ μΆλ ₯ν μ μλ€.
β‘ Oracle λ²μ μ λ°λ₯Έ ROWID ν¬λ§· λ³ν
Oracle 7 μ΄μ (μ ν ROWID ν¬λ§·)κΉμ§μ ROWIDλ 6λ°μ΄νΈ ν¬κΈ°λ₯Ό κ°μ§λ©°, λ°μ΄ν° νμΌ λ²νΈ, λΈλ‘ λ²νΈ, λ‘μ° λ²νΈμ 3κ° κ΅¬μ±μμλ‘ μ΄λ£¨μ΄μ§λ€.
Oracle 8 μ΄ν (νμ₯ ROWID ν¬λ§·)λΆν°λ λ°μ΄ν°μ μ μ¦κ°μ λ λ§μ λ°μ΄ν° νμΌ κ΄λ¦¬, νν°μ λ κΈ°λ₯ λμ λ±μ μ΄μ λ‘ μ€λΈμ νΈ λ²νΈκΉμ§ μ μ₯ν νμκ° μκ²ΌκΈ° λλ¬Έμ ROWID ν¬κΈ°κ° 10λ°μ΄νΈλ‘ νλλμλ€. κΈ°μ‘΄ 3κ°μ ꡬμ±μμμ λ°μ΄ν° μ€λΈμ νΈ λ²νΈκ° μΆκ°λμ΄ μ΄ 4κ°μ ꡬμ±μμλ‘ κ΅¬μ±λλ€.
- λ°μ΄ν° μ€λΈμ νΈ λ²νΈ: λ°μ΄ν°λ² μ΄μ€ μΈκ·Έλ¨ΌνΈλ₯Ό μλ³νκΈ° μν΄ μ¬μ©λλ λ°μ΄ν° μ€λΈμ νΈ λ²νΈ
- λ°μ΄ν° νμΌ λ²νΈ: ν μ΄λΈμ€νμ΄μ€ λ΄μμμ μλμ λ²νΈ(λ²μ 7κΉμ§λ λ°μ΄ν°λ² μ΄μ€ λ΄μμ μ μΌν κ°)
- λΈλ‘ λ²νΈ: λ°μ΄ν° νμΌ λ΄μμμ μλμ λΈλ‘ λ²νΈ
- λ‘μ° λ²νΈ: ν΄λΉ λΈλ‘ λ΄ λ μ½λ μλ²
μ΄μ κ°μ΄ ROWIDμ ꡬ쑰λ₯Ό μ΄ν΄νλ κ²μ Oracleμμ ν μ΄λΈ λ μ½λμ 물리μ μ κ·Ό λ°©μ λ° μΈλ±μ€μμ κ΄κ³λ₯Ό νμ νλ λ° λ§€μ° μ€μνλ€.
ποΈ μΈλ±μ€ νμ
1. μΈλ±μ€ νμ
μΈλ±μ€ νμμ ν¬κ² μμ§μ νμκ³Ό μνμ νμμΌλ‘ λλ μ μλ€.
(1) μΈλ±μ€ μμ§μ νμ
μ λ ¬λ μΈλ±μ€ λ μ½λ μ€μμ 쑰건μ λ§μ‘±νλ 첫 λ²μ§Έ λ μ½λλ₯Ό μ°Ύλ κ³Όμ , μΈλ±μ€ μμ μ§μ μ μ°Ύλ κ³Όμ
μμ§μ νμμ μνμ νμμ μν μμ μ§μ μ μ°Ύλ κ³Όμ μ΄λΌκ³ ν μ μμΌλ©°, μΈλ±μ€ νΈλ¦¬μ 루νΈμμ 리ν λΈλ‘κΉμ§ λ΄λ €κ°λ λ°©μμΌλ‘ μ§νλλ―λ‘ ‘μμ§μ ’μ΄λΌκ³ λΆλ₯Έλ€
βοΈ νμκ³Όμ
- νμμ λ£¨νΈ λΈλ‘μμ μμνμ¬, κ° λ Έλμ μ μ₯λ νμ λΈλ‘μ λν μ£Όμκ°μ μ΄μ©νμ¬ λ¦¬ν λΈλ‘κΉμ§ μ§νλλ€.
- μ°Ύκ³ μ νλ κ°λ³΄λ€ ν¬κ±°λ κ°μ κ°μ λ§λλ©΄ λ°λ‘ μ§μ λ μ½λκ° κ°λ¦¬ν€λ νμ λΈλ‘μΌλ‘ μ΄λνλ€.
μ΄ κ³Όμ μ 쑰건μ λ§μ‘±νλ λ μ½λλ₯Ό μ°Ύμκ°λ κ³Όμ μ΄ μλλΌ μ‘°κ±΄μ λ§μ‘±νλ 첫λ²μ§Έ λ μ½λ
λ₯Ό μ°Ύλ κ³Όμ μ΄λ€. λν, 쑰건μ λ§μ‘±νλ μμμ μ λΉ λ₯΄κ² μ°ΎκΈ° μν κ²μΌλ‘, μ΄νμ μνμ νμ μ€λΉ λ¨κ³λΌκ³ λ³Ό μ μλ€.
(2) μΈλ±μ€ μνμ νμ
μΈλ±μ€μμ 본격μ μΌλ‘ λ°μ΄ν°λ₯Ό μ°Ύλ κ³Όμ
μνμ νμμ λ²μ μ€μΊ(range scan)μ΄λΌκ³ ν μ μμΌλ©°, μΈλ±μ€μ 리ν λΈλ‘μ μ μ₯λ λ μ½λλ€μ΄ λ Όλ¦¬μ μμλλ‘ λ°°μ΄λμ΄ μμ΄ μ’μμ μ° λλ μ°μμ μ’λ‘ μμ°¨μ μΌλ‘ μ€μΊνκ² λλ€.
βοΈ νμκ³Όμ
- μμ§μ νμμ ν΅ν΄ μ€μΊ μμμ (첫 λ²μ§Έ λ μ½λ)μ μ°ΎμμΌλ©΄ 리ν λΈλ‘μ μνμ μΌλ‘ νμμ μ§ννλ€.
- μΈλ±μ€ 리ν λΈλ‘μ μλ°©ν₯ μ°κ²° 리μ€νΈ κ΅¬μ‘°λ‘ λμ΄ μμ΄, μμ λ μ½λμμ μ’μ°λ‘ μμ°¨μ (μνμ ) μ€μΊμ΄ κ°λ₯νλ€.
- μ΄ κ³Όμ μ ν΅ν΄ 쑰건μ λΆν©νλ λ μ½λλ€μ ROWIDλ₯Ό νλνλ€.
- λ§μ½ μΈλ±μ€λ§μΌλ‘ νμν λͺ¨λ μ»¬λΌ μ 보λ₯Ό μ 곡ν μ μλ€λ©΄ νμμ μ¬κΈ°μ μ’ λ£λμ§λ§, κ·Έλ μ§ μμ κ²½μ° νλν ROWIDλ₯Ό μ΄μ©νμ¬ ν μ΄λΈ λ°μ΄ν°λ₯Ό μΆκ°λ‘ μ‘°ννλ€.
μμ§μ νμκ³Ό μνμ νμμ λͺ¨λ μννλ μ΄μ λ, 쑰건μ λΆν©νλ λͺ¨λ λ°μ΄ν°λ₯Ό μ°Ύμλ΄κ³ κ·Έμ ν΄λΉνλ ROWIDλ₯Ό ν보νκΈ° μν¨μ΄λ€. λ§μ½ νμν 컬λΌμ΄ μΈλ±μ€μ λͺ¨λ ν¬ν¨λμ΄ μλ€λ©΄ μ΄ κ³Όμ μ ν΅ν΄ κ²μμ μλ£ν μ μμΌλ, κ·Έλ μ§ μμ κ²½μ° ν μ΄λΈ μ κ·Όμ΄ νμνκΈ° λλ¬Έμ΄λ€.
2. κ²°ν© μΈλ±μ€ ꡬ쑰μ νμ
λ κ° μ΄μμ 컬λΌμ κ²°ν©νμ¬ μΈλ±μ€λ₯Ό μμ±ν μ μλ€. κ²°ν© μΈλ±μ€μ κ²½μ°, μΈλ±μ€ λ΄μ μ»¬λΌ μμμ κ΄κ³μμ΄ "=" 쑰건μΌλ‘ κ²μν λ μ½λ μΈλ±μ€ λΈλ‘ μλ λμΌνλ€.
μ¦, μΈλ±μ€ μ»¬λΌ μμμ μκ΄μμ΄, λͺ¨λ κ²½λ‘κ° B * Treeμ κ· ν ꡬ쑰λ₯Ό λ°λ₯΄κΈ° λλ¬Έμ 루νΈλΆν° 리νκΉμ§μ λμ΄λ νμ λμΌνλ©°, μ΄μ λ°λΌ λΈλ‘ I/O νμλ κ°μΌλ―λ‘ μ±λ₯λ λκ°λ€.
λ¨, "=" 쑰건 κ²μμ νμ λ μ΄μΌκΈ°μ΄λ©°, λ²μ 쑰건μ΄λ κ²°ν© μ‘°κ±΄μ λ°λΌμλ μ κ·Ό λ°©μμ μ°¨μ΄κ° λ°μν μ μλ€.
'DB > SQLP' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[SQLP] 2-3. μΈλ±μ€Β μ€μΊΒ λ°©μ (0) | 2025.03.05 |
---|---|
[SQLP] 2-2. μΈλ±μ€ νμ© (0) | 2025.02.23 |
[SQLP] 1-5. I/O λ©μ»€λμ¦ (0) | 2025.02.11 |
[SQLP] 1-4. λΌμ΄λΈλ¬λ¦¬ μΊμ μ΅μ ν (0) | 2025.02.09 |
[SQLP] 1-3. SQL 곡μ λ° μ¬μ¬μ© (0) | 2025.02.09 |