Home
>
DB
>
πΎ[Database] Covering Indexλ 무μμΌκΉμ?
Database
Native SQL Query
MySQL
βπΎ[Database] Covering Indexλ 무μμΌκΉμ?β
π Intro.
- μΏΌλ¦¬κ° μμ²νλ λͺ¨λ λ°μ΄ν°κ° μΈλ±μ€μ ν¬ν¨λμ΄ μμ΄, ν
μ΄λΈμ μ€μ λ°μ΄ν°λ₯Ό μ‘°ννμ§ μκ³ λ κ²°κ³Όλ₯Ό λ°νν μ μλ μΈλ±μ€λ₯Ό λ§ν©λλ€.
- μ¦, μΈλ±μ€λ§μΌλ‘ 쿼리λ₯Ό μ²λ¦¬ν μ μλ κ²½μ°λ₯Ό Covering IndexλΌκ³ λΆλ¦
λλ€.
- μ΄λ λ°μ΄ν°λ² μ΄μ€μ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
β
1οΈβ£ Covering Indexμ λμ λ°©μ.
-
1. μΌλ°μ μΈ μΈλ±μ€ μ¬μ©:
- μΏΌλ¦¬κ° μ€νλλ©΄ λ¨Όμ μΈλ±μ€λ₯Ό νμνμ¬ λ°μ΄ν°μ μμΉλ₯Ό μ°Ύκ³ , μ΄ν ν
μ΄λΈμ λ°μ΄ν°λ₯Ό μ‘°νν©λλ€.
- μ΄λ₯Ό βμΈλ±μ€ 룩μ
(Index Lookup)βμ΄λΌκ³ ν©λλ€.
-
2. Covering Index μ¬μ©:
- μΏΌλ¦¬κ° μμ²νλ λͺ¨λ λ°μ΄ν°κ° μΈλ±μ€μ ν¬ν¨λμ΄ μμΌλ©΄, μΈλ±μ€λ§μΌλ‘ κ²°κ³Όλ₯Ό λ°νν μ μμ΅λλ€.
- ν
μ΄λΈ λ°μ΄ν°λ₯Ό μ‘°νν νμκ° μμΌλ―λ‘ λμ€ν¬ I/Oλ₯Ό μ€μ΄κ³ μ±λ₯μ κ°μ ν©λλ€.
β
2οΈβ£ Covering Indexμ 쑰건.
- 쿼리μ SELECTμ μ ν¬ν¨λ 컬λΌκ³Ό WHERE, ORDER BY λλ GROUP BYμ μ¬μ©λ 컬λΌμ΄ λͺ¨λ μΈλ±μ€μ ν¬ν¨λμ΄ μμ΄μΌ ν©λλ€.
- μ΄λ¬ν μΈλ±μ€λ₯Ό βCovering IndexβλΌκ³ λΆλ¦
λλ€.
β
3οΈβ£ Covering Indexμ μμ .
1οΈβ£ ν
μ΄λΈ μμ± λ° λ°μ΄ν° μ½μ
CREATE TABLE article (
article_id INT NOT NULL,
board_id INT NOT NULL,
created_at DATETIME NOT NULL,
title VARCHAR(255),
content TEXT,
PRIMARY KEY (article_id)
);
2οΈβ£ μΈλ±μ€ μμ±.
CREATE INDEX idx_board_created_at ON article (board_id, created_at);
3οΈβ£ Covering Index νμ© μΏΌλ¦¬.
EXPLAIN
SELECT board_id, created_at
FROM article
WHERE board_id = 1
ORDER BY created_at DESC;
-
μΈλ±μ€ λμ μ€λͺ
:
- 쿼리μμ μμ²ν 컬λΌ(board_id, created_at)μ΄ μΈλ±μ€ idx_board_created_atμ λͺ¨λ ν¬ν¨λμ΄ μμΌλ―λ‘:
-
Covering Indexκ° μ μ©λ©λλ€.
- MySQLμ ν
μ΄λΈμ μ€μ λ°μ΄ν°λ₯Ό μ‘°ννμ§ μκ³ μΈλ±μ€λ§μΌλ‘ κ²°κ³Όλ₯Ό λ°νν©λλ€.
β
4οΈβ£ Covering Indexμ μ₯μ .
-
1. μ±λ₯ ν₯μ:
- μΏΌλ¦¬κ° μμ²ν λ°μ΄ν°κ° λͺ¨λ μΈλ±μ€μ μ΄ν¨λμ΄ μμΌλ―λ‘ ν
μ΄λΈμ λ°μ΄ν°λ₯Ό μ½μ§ μμλ λ©λλ€.
- λμ€ν¬ I/Oκ° μ€μ΄λ€κ³ , 쿼리 μ€ν μκ°μ΄ ν¬κ² λ¨μΆλ©λλ€.
-
2. ν¨μ¨μ μΈ μ€ν λ¦¬μ§ νμ©:
- ν
μ΄λΈ λ°μ΄ν°λ₯Ό μ½μ§ μκ³ , μΈλ±μ€λ§μΌλ‘ μ²λ¦¬λλ―λ‘ λ μ μ μμμ μ¬μ©ν©λλ€.
-
3. νΉμ 쿼리μ μ΅μ ν κ°λ₯:
- νΉμ 쿼리μμ μμ£Ό μ¬μ©νλ 컬λΌλ§ ν¬ν¨νμ¬ μ€κ³νλ©΄, 쿼리 μ±λ₯μ μ΅μ νν μ μμ΅λλ€.
β
5οΈβ£ Covering Indexμ νκ³.
-
1. μΈλ±μ€ ν¬κΈ° μ¦κ°:
- μΈλ±μ€μ λ§μ 컬λΌμ μΆκ°νλ©΄, μΈλ±μ€ ν¬κΈ°κ° μ»€μ Έ μ½μ
/μμ μ±λ₯μ΄ μ νλ μ μμ΅λλ€.
-
2. λͺ¨λ 쿼리μ μ μ© λΆκ°λ₯:
-
SELECT *
μ²λΌ ν
μ΄λΈμ λͺ¨λ 컬λΌμ μμ²νλ 쿼리μλ μ μ©λμ§ μμ΅λλ€.
- 쿼리μ ν¬ν¨λμ§ μμ 컬λΌμ μ¬μ ν μΌμ΄λΈμμ μ‘°νν΄μΌ ν©λλ€.
-
3. 볡μ‘ν μ€κ³ νμ:
- νΉμ 쿼리μ λ§μΆ 컀λ²λ§ μΈλ±μ€λ₯Ό μ€κ³νλ €λ©΄ 쿼리 λΆμμ΄ νμνλ©°, μΈλ±μ€ κ΄λ¦¬κ° 볡μ‘ν΄μ§ μ μμ΅λλ€.
β
6οΈβ£ Covering Indexκ° μ ν©ν κ²½μ°.
-
1. μ½κΈ°(SELECT) μμ
μ΄ λ§μ κ²½μ°:
- μ½κΈ° μ±λ₯μ΄ μ€μν μ ν리μΌμ΄μ
μμ μ μ©ν©λλ€.
-
2. μμ£Ό μ¬μ©λλ νΉμ μΏΌλ¦¬κ° μλ κ²½μ°:
- 쿼리 ν¨ν΄μ λΆμνμ¬, νμν 컬λΌλ§ ν¬ν¨νλ 컀λ²λ§ μΈλ±μ€λ₯Ό μ€κ³ν©λλ€.
-
3. λ²μ κ²μκ³Ό μ λ ¬μ΄ μ€μν κ²½μ°:
- μ: λ μ§λ³ μ λ ¬, νΉμ 쑰건μ λ°λΌ νν°λ§λ κ²°κ³Ό μ‘°ν λ±.
β
7οΈβ£ Covering Indeμ EXPLAIN
- EXPLAINμ μ¬μ©νλ©΄ 쿼리μμ 컀λ²λ§ μΈλ±μ€κ° μ μ©λμλμ§ νμΈν μ μμ΅λλ€.
-
EXPLAIN κ²°κ³Όμμ νμΈ λ°©λ²:
- Extra μ΄(Column)μ Using indexκ° νμλλ©΄ Covering Indexκ° μ μ©λ κ²μ
λλ€.
- μμ :
EXPLAIN
SELECT board_id, created_at
FROM article
WHERE board_id = 1
ORDER BY created_at DESC;
id |
select_type |
table |
type |
key |
key_len |
ref |
rows |
Extra |
1 |
SIMPLE |
article |
index |
idx_board_created_at |
8 |
const |
100 |
Using Index |
-
κ²°κ³Ό ν΄μ:
- Extraμ Using indexκ° νμλλ©΄, μΏΌλ¦¬κ° μ»€λ²λ§ μΈλ±μ€λ₯Ό μ¬μ©νμμ μλ―Έν©λλ€.
π μ 리.
-
Covering Indexλ μΏΌλ¦¬κ° μμ²νλ λͺ¨λ λ°μ΄ν°κ° μΈλ±μ€μ ν¬ν¨λ κ²½μ°, ν
μ΄λΈμ μ‘°ννμ§ μκ³ λ 쿼리λ₯Ό μ²λ¦¬ν μ μλ μΈλ±μ€μ
λλ€.
-
μ₯μ : λμ€ν¬ I/O κ°μ, 쿼리 μ±λ₯ ν₯μ.
-
λ¨μ : μΈλ±μ€ ν¬κΈ° μ¦κ°, λͺ¨λ 쿼리μ μ μ© λΆκ°λ₯.
- MySQLμμ EXPLAINμΌλ‘ μΈλ±μ€ μ¬μ© μ¬λΆλ₯Ό νμΈν μ μμΌλ©°, Extraμ Using indexκ° νμλλ©΄ Covering Indexκ° μ μ©λ κ²μ
λλ€.