π‘
μΈλ±μ€(Index)λ λ°μ΄ν° κ²μ μλλ₯Ό ν₯μμν€λ λ°μ΄ν° κ΅¬μ‘°λ‘ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ‘°νν μ μλν¬μΈν°λ₯Ό μ 곡νλ€.λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό μ°Ύμ λ μ 체 ν μ΄λΈμ κ²μνλ λμ μΈλ±μ€λ₯Ό ν΅ν΄ κ²μμ νλ―λ‘ μλκ° λ λΉ¨λΌμ§κ² λλ€.
μΈλ±μ€λ μ£Όλ‘
WHEREμ μ 쑰건μ΄λJOIN μ°μ°μ μ¬μ©λλ 컬λΌμ μμ±νλ€.λ€λ§ μΈλ±μ€λ λ°μ΄ν° μ μ₯ 곡κ°μ μ°¨μ§νκ³ λ°μ΄ν°κ° λ³κ²½λ λλ§λ€ μΈλ±μ€ μμ κ°±μ ν΄μΌ νκΈ° λλ¬Έμ μ΄λ€ 컬λΌμ μΈλ±μ€λ₯Ό μμ±ν μ§λ μ μ€ν κ²°μ ν΄μΌ νλ€.
β PRIMARY KEY μ μ½μ‘°κ±΄μ μ§λ κΈ°λ³Έ ν μ΄λΈ μμ± ν κΈ°λ³Έ λ°μ΄ν° INSERT ν μ‘°ν
CREATE TABLE phone (
phone_code INT PRIMARY KEY,
phone_name VARCHAR(100),
phone_price DECIMAL(10, 2)
);
INSERT
INTO phone (phone_code , phone_name , phone_price )
VALUES
(1, 'galaxyS23', 1200000),
(2, 'iPhone14pro', 1433000),
(3, 'galaxyZfold3', 1730000);
SELECT * FROM phone;
β μΈλ±μ€κ° μλ 컬λΌμ WHEREμ μ 쑰건μΌλ‘ νμ©ν μ‘°ν μ§ν μ EXPLAINμΌλ‘ 쿼리 μ€ν κ³ν νμΈ
EXPLAIN SELECT * FROM phone WHERE phone_name = 'galaxyS23';
β phone_name 컬λΌμ idx_nameμ΄λΌλ μ΄λ¦μ μΈλ±μ€ μμ± ν νμΈ
CREATE INDEX idx_name ON phone (phone_name);
2κ° μ΄μμ 컬λΌμ νλ²μ νλμ μΈλ±μ€λ‘ μ€μ ν΄μ μμ±ν μ μλ€.
β
λ³΅ν© μΈλ±μ€ μμ±
CREATE INDEX idx_name_price ON phone (phone_name, phone_price);
SHOW INDEX FROM phone;
β ν μ΄λΈμ μΈλ±μ€κ° μ€μ λ 컬λΌμ νμ©ν΄ μ‘°νλ₯Ό μ§ν
SELECT * FROM phone WHERE phone_name = 'iPhone14pro';
β
EXPLAIN λͺ
λ Ήμ΄λ‘ 쿼리 μ€ν κ³ν νμΈ(μΈλ±μ€ μ¬μ© μ¬λΆ λ° μ¬μ© μ»¬λΌ νμΈ)
EXPLAIN SELECT * FROM phone WHERE phone_name = 'iPhone14pro';
β‘οΈ μΈλ±μ€ μ΅μ ν(μ¬κ΅¬μ±)
- μΈλ±μ€ μ΅μ ν(μ¬κ΅¬μ±)μ μΈλ±μ€κ° ννΈνλμκ±°λ, λ°μ΄ν°μ λλΆλΆμ΄ λ³κ²½λ κ²½μ°μ μ μ©νλ€.
- μ΄λ μΈλ±μ€μ μ±λ₯μ κ°μ νκ³ , λμ€ν¬ 곡κ°μ λ ν¨μ¨μ μΌλ‘ μ¬μ©νκ² ν΄μ€λ€.
- λ¨, μΈλ±μ€λ₯Ό μ¬κ΅¬μ±νλ λμ ν΄λΉ ν μ΄λΈμ μ κΈΈ μ μμΌλ―λ‘, μ΄ μμ μ μ£Όμν΄μ μνν΄μΌ νλ€.
ALTER TABLEλͺ λ Ήμ΄λ₯Ό μ¬μ©ν΄μ μ¬κ΅¬μ±νλ€.
ALTER TABLE phone DROP INDEX idx_name;
ALTER TABLE phone ADD INDEX idx_name(phone_name);
λν, MySQLμ InnoDB μμ§μ μ¬μ©νλ κ²½μ°μλ OPTIMIZE TABLE λͺ
λ Ήμ μ¬μ©νμ¬ ν
μ΄λΈκ³Ό μΈλ±μ€λ₯Ό μ΅μ νν μλ μλ€.
OPTIMIZE TABLE phone;
β μΈλ±μ€ μμ ν ν μ΄λΈμ μ‘΄μ¬νλ μΈλ±μ€ νμΈ
DROP INDEX idx_name ON phone;
SHOW INDEX FROM phone;