λ³΅ν© μΈλ±μ€λ μΈμ νμν κΉ?New
π Overview
λ³΅ν© μΈλ±μ€λ μ¬λ¬ 컬λΌμ λ¬Άμ΄ μΆκ°νλ©΄ μ‘°ν μ±λ₯μ΄ μ’μμ§λ κΈ°λ₯μ΄λΌκ³ μκ°νκΈ° μ½λ€.
νμ§λ§ μ€μ λ‘λ 컬λΌμ κ°μλ³΄λ€ μ ν리μΌμ΄μ μ΄ λ°μ΄ν°λ₯Ό μ΄λ€ 쑰건μΌλ‘ μ°Ύκ³ , μ΄λ€ μμλ‘ μ λ ¬νλ©°, μ΄λ€ λ¨μλ‘ λλμ΄ λ°ννλμ§κ° λ μ€μνλ€.
μλ₯Ό λ€μ΄ λ€μκ³Ό κ°μ μ‘°νκ° μλ€κ³ κ°μ ν΄λ³΄μ.
- νΉμ μν(
status)μ λ°μ΄ν°λ§ μ‘°ννλ€. - κΈ°λ³Έ ν€(
id)λ₯Ό κΈ°μ€μΌλ‘ μ΅μ μ μ λ ¬νλ€. - νμ΄μ§ λ¨μλ‘ κ²°κ³Όλ₯Ό λ°ννλ€.
λ°μ΄ν°κ° μ μ λλ λ¨μΌ μΈλ±μ€λ§μΌλ‘λ ν° λ¬Έμ κ° λ°μνμ§ μμ μ μλ€. νμ§λ§ λ°μ΄ν°κ° μμ΄κ³ νΈμΆλμ΄ μ¦κ°νλ©΄, λ°μ΄ν°λ² μ΄μ€λ μΈλ±μ€λ₯Ό μ¬μ©νκ³ λ μ΅μ’ κ²°κ³Όλ³΄λ€ ν¨μ¬ λ§μ λ°μ΄ν°λ₯Ό μ½κ±°λ λ³λμ μ λ ¬ μμ μ μννκ² λλ€.
κ·Έλ λ€λ©΄ λ³΅ν© μΈλ±μ€λ μ΄λ€ μν©μμ νμνκ³ , μ΄λ€ κΈ°μ€μΌλ‘ μ€κ³ν΄μΌ ν κΉ?
1. λ³΅ν© μΈλ±μ€κ° νμνλ€λ μ νΈ
μ²μλΆν° λͺ¨λ μ‘°ν 쑰건μ λ³΅ν© μΈλ±μ€λ‘ λ§λ€ νμλ μλ€.
μ°μ μ΄μ νκ²½μμ μ€μ λ‘ λλ¦° μμ²μ μ°Ύκ³ , ν΄λΉ μμ²μ΄ μ΄λ€ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ½λμ§ νμΈνλ κ²μ΄ λ¨Όμ λ€.
μ€ν κ³νμμλ λ€μκ³Ό κ°μ μ νΈλ₯Ό μ΄ν΄λ³Ό μ μλ€.
- μ 체 ν μ΄λΈμ νμΈνκ³ μλ κ²½μ°
- μΈλ±μ€λ₯Ό μ¬μ©νμ§λ§ νμν κ²°κ³Όλ³΄λ€ ν¨μ¬ λ§μ νμ μ½λ κ²½μ°
- λ³λμ μ λ ¬ μμ μ΄λ μμ ν μ΄λΈμ μ¬μ©νλ κ²½μ°
- λ°μ΄ν°κ° μ¦κ°ν μλ‘ μλ΅ μκ°μ΄ ν¨κ» μ¦κ°νλ κ²½μ°
μλ₯Ό λ€μ΄ λ€μκ³Ό κ°μ μΏΌλ¦¬κ° μλ€κ³ ν΄λ³΄μ.
SELECT id, status, title
FROM posts
WHERE status = 'PUBLISHED'
ORDER BY id DESC
LIMIT 20;statusμ λ¨μΌ μΈλ±μ€κ° μλ€λ©΄ λ°μ΄ν°λ² μ΄μ€λ PUBLISHED μνμ λ°μ΄ν°λ₯Ό μ°Ύλ λ°μλ λμμ λ°μ μ μλ€.
νμ§λ§ ν΄λΉ λ²μμμ λ€μ id κΈ°μ€μΌλ‘ μ λ ¬ν΄μΌ νλ€λ©΄, 쑰건μ λ§λ λ°μ΄ν°λ₯Ό λ λ§μ΄ μ½μ λ€ μ λ ¬νλ μμ
μ΄ μΆκ°λ μ μλ€. κ²°κ³Όλ 20건λΏμΈλ° λ°μ΄ν°λ² μ΄μ€κ° κ·Έλ³΄λ€ ν¨μ¬ λ§μ νμ νμΈνκ³ μλ€λ©΄, νμ¬ μΈλ±μ€κ° μ€μ μ‘°ν κ²½λ‘λ₯Ό μΆ©λΆν νννμ§ λͺ»νκ³ μμ κ°λ₯μ±μ΄ μλ€.
2. μ‘°ν κ²½λ‘μ λ§λ λ³΅ν© μΈλ±μ€
μμ μ‘°ν 쑰건과 μ λ ¬ μμλ₯Ό ν¨κ» κ³ λ €νλ©΄ λ€μκ³Ό κ°μ μΈλ±μ€λ₯Ό νλ³΄λ‘ κ²ν ν μ μλ€.
CREATE INDEX idx_posts_status_id
ON posts (status, id DESC);μ΄ μΈλ±μ€λ λ¨Όμ status 쑰건μΌλ‘ μ‘°ν λ²μλ₯Ό μ’ν λ€, ν΄λΉ λ²μ μμμ id μμλλ‘ λ°μ΄ν°λ₯Ό νμν μ μλλ‘ μ€κ³ν κ²μ΄λ€.
μ¦, λ°μ΄ν°λ² μ΄μ€κ° λ€μ λ μμ μ νλμ μΈλ±μ€ κ²½λ‘μμ μ²λ¦¬ν μ μλλ‘ λλλ€.
status = 'PUBLISHED'쑰건μΌλ‘ λμ λ²μ μ’νκΈ°- ν΄λΉ λ²μμμ
id DESCμμλ‘ λ°μ΄ν° νμνκΈ°
λ€λ§ idκ° νμ μ€μ μμ± μκ°μ μμλ₯Ό μλ―Ένλ κ²μ μλλ€. μ ν리μΌμ΄μ
μμ μ΅μ μμ νννλ €λ λͺ©μ μ΄λΌλ©΄ created_atμ΄ λ μ νν μ λ ¬ κΈ°μ€μΌ μλ μλ€.
CREATE INDEX idx_posts_status_created_at
ON posts (status, created_at DESC, id DESC);λμΌν μμ± μκ°μ κ°μ§ λ°μ΄ν°μ μμλ₯Ό μμ μ μΌλ‘ μ μ§νλ €λ©΄ idλ₯Ό 보쑰 μ λ ¬ κΈ°μ€μΌλ‘ ν¨κ» μ¬μ©νλ λ°©μλ κ³ λ €ν μ μλ€.
λ³΅ν© μΈλ±μ€λ λ¨μν 컬λΌμ μ¬λ¬ κ° μΆκ°νλ κΈ°λ₯μ΄ μλλ€. μ€μ 쿼리μ WHERE, ORDER BY, LIMITμ΄ μ΄λ€ μμλ‘ μ°κ²°λλμ§λ₯Ό μΈλ±μ€μ νννλ μ€κ³μ κ°κΉλ€.
3. 컬λΌμ μμκ° μ€μν μ΄μ
νΉν (status, id)μ (id, status)λ μλ‘ λ€λ₯Έ μΈλ±μ€λ€.
λ μΈλ±μ€ λͺ¨λ κ°μ 컬λΌμ ν¬ν¨νκ³ μμ§λ§, λ°μ΄ν°λ² μ΄μ€κ° μΈλ±μ€λ₯Ό νμνλ λ°©μμ λ¬λΌμ§λ€.
-- μνλ‘ λ²μλ₯Ό μ’ν λ€ id μμλ‘ μ‘°ν
(status, id)
-- id μμκ° μ°μ μΈ μΈλ±μ€
(id, status)(status, id)λ statusκ° μ‘°νμ μμ 쑰건μΌλ‘ μ¬μ©λλ ν¨ν΄μ μ ν©νλ€. λ°λ©΄ (id, status)λ idκ° λ¨Όμ μ λ ¬μ΄λ λ²μ 쑰건μ μ¬μ©λλ ν¨ν΄μμ λ μμ°μ€λ½κ² νμ©λ μ μλ€.
λ³΅ν© μΈλ±μ€μ μμͺ½ 컬λΌμ μλ΅νλ©΄ λ€μͺ½ 컬λΌλ§μΌλ‘λ μΈλ±μ€λ₯Ό μνλ λ°©μμΌλ‘ νμ©νκΈ° μ΄λ €μΈ μ μλ€. λ°λΌμ μμ£Ό μ¬μ©νλ 컬λΌμ μ무 μμλ‘λ λμ΄νλ κ²λ§μΌλ‘λ μΆ©λΆνμ§ μλ€.
λ€μκ³Ό κ°μ λ΄μ©μ ν¨κ» νμΈν΄μΌ νλ€.
- μ€μ
WHEREμ‘°κ±΄μ΄ λ¬΄μμΈμ§ ORDER BYμ 컬λΌκ³Ό λ°©ν₯μ΄ λ¬΄μμΈμ§- νμ΄μ§ λ¨μ μ‘°νκ°
OFFSETκΈ°λ°μΈμ§ 컀μ κΈ°λ°μΈμ§ - 첫 λ²μ§Έ μΈλ±μ€ 컬λΌμ΄ μ€μ μ‘°νμμ νμ μ¬μ©λλμ§
- 쑰건μ μ νλμ λ°μ΄ν° λΆν¬κ° μ΄λ€μ§
νμ΄μ§κ° κΉμ΄μ§μλ‘ OFFSET κΈ°λ° μ‘°νλ μμ λ°μ΄ν°λ₯Ό 건λλ°κΈ° μν΄ λ λ§μ νμ νμΈν μ μλ€. μ΄λ° κ²½μ°μλ λ§μ§λ§μΌλ‘ μ‘°νν idλ₯Ό κΈ°μ€μΌλ‘ λ€μ νμ΄μ§λ₯Ό κ°μ Έμ€λ 컀μ κΈ°λ° μ‘°νλ ν¨κ» κ²ν ν μ μλ€.
SELECT id, status, title
FROM posts
WHERE status = 'PUBLISHED'
AND id < 1200
ORDER BY id DESC
LIMIT 20;μ΄ μΏΌλ¦¬ μμ (status, id DESC) μΈλ±μ€κ° μ‘°ν 쑰건과 μ λ ¬ μμλ₯Ό νννλ λ° λμμ μ€ μ μλ€.
4. μ€ν κ³νκ³Ό μ΄μ νκ²½μμ κ²μ¦νκΈ°
λ³΅ν© μΈλ±μ€λ κ°λ° λ¨κ³μμ 미리 μΆκ°νλ€κ³ νμ μ’μ κ²°κ³Όλ₯Ό 보μ₯νμ§ μλλ€.
μΈλ±μ€λ₯Ό μΆκ°νκΈ° μ μλ λ¨Όμ μ€μ μ€ν κ³νμ νμΈνλ€.
EXPLAIN ANALYZE
SELECT id, status, title
FROM posts
WHERE status = 'PUBLISHED'
ORDER BY id DESC
LIMIT 20;μ΄λ λ¨μν μΈλ±μ€ μ΄λ¦μ΄ νμλλμ§λ§ λ³΄μ§ μκ³ , μμν μ‘°ν κ²½λ‘κ° μ€μ λ‘ μ¬μ©λμλμ§ νμΈν΄μΌ νλ€.
- μμν μΈλ±μ€λ₯Ό μ¬μ©νλκ°?
- μ€μ λ‘ μ½μ νμ μκ° μ€μλκ°?
- μ λ ¬μ΄λ μμ ν μ΄λΈμ΄ μ¬λΌμ‘λκ°?
- μλ΅ μκ°μ΄ κ°μ λμλκ°?
- νΉμ λ°μ΄ν° λΆν¬μμλ§ μ’μμ§ κ²μ μλκ°?
μΈλ±μ€ μΆκ°μλ λΉμ©λ μλ€.
- μ μ₯ 곡κ°μ μΆκ°λ‘ μ¬μ©νλ€.
INSERT,UPDATE,DELETEμ μΈλ±μ€λ ν¨κ» κ°±μ ν΄μΌ νλ€.- μΈλ±μ€κ° λ§μμ§μλ‘ λ°μ΄ν° λ³κ²½ λΉμ©κ³Ό κ΄λ¦¬ λΉμ©μ΄ μ¦κ°νλ€.
- μ¬μ©νμ§ μλ μΈλ±μ€κ° μμ΄λ©΄ μ΄λ€ μΈλ±μ€λ₯Ό μ μ§ν΄μΌ νλμ§ νλ¨νκΈ° μ΄λ €μμ§λ€.
λ°λΌμ μΈλ±μ€λ₯Ό μΆκ°ν λ€μλ κ°μ 쑰건μΌλ‘ λ€μ μΈ‘μ νκ³ , μ€μ μ΄μ μμ²μ μλ΅ μκ°κ³Ό λ°μ΄ν°λ² μ΄μ€ λΆνκ° κ°μ λμλμ§ νμΈν΄μΌ νλ€.
AIλ 쿼리λ₯Ό λΆμνκ³ μΈλ±μ€ ν보λ₯Ό μ μνκ±°λ μ€ν κ³νμ ν΄μνλ λ° λμμ μ€ μ μλ€. νμ§λ§ μ΄λ€ μμ²μ΄ μ΄μ νκ²½μμ μ€μνμ§, νμ¬ μ±λ₯ μ νκ° μ¬μ©μ κ²½νμ μ΄λ€ μν₯μ μ£Όλμ§, μΈλ±μ€ μΆκ° λΉμ©μ κ°λΉν μ μλμ§λ μ½λλ§ λ³΄κ³ νλ¨νκΈ° μ΄λ ΅λ€.
π€ Understanding
λ³΅ν© μΈλ±μ€κ° νμν μκ°μ 컬λΌμ΄ μ¬λ¬ κ° μ¬μ©λ λκ° μλλΌ, μ€μ μ‘°ν κ²½λ‘κ° κΈ°μ‘΄ μΈλ±μ€λ§μΌλ‘ ν¨μ¨μ μΌλ‘ ννλμ§ μμ λλΌκ³ μκ°νλ€.
λ¨Όμ μ΄μ νκ²½μμ λλ¦° μμ²μ μ°Ύκ³ , μ€ν κ³νμ ν΅ν΄ λ°μ΄ν°λ² μ΄μ€κ° μΌλ§λ λ§μ λ°μ΄ν°λ₯Ό μ½λμ§ νμΈν΄μΌ νλ€. κ·Έλ€μ μ€μ μ‘°ν 쑰건과 μ λ ¬, νμ΄μ§ λ¨μ μ‘°ν λ°©μμ λ§μΆ° μΈλ±μ€λ₯Ό μ€κ³νκ³ μ μ© ν κ°μ 쑰건μμ λ€μ μΈ‘μ ν΄μΌ νλ€.
λ³΅ν© μΈλ±μ€μ μ»¬λΌ μμλ μ€μνμ§λ§, κ·Έλ³΄λ€ λ¨Όμ ν΄κ²°νλ €λ μ‘°ν ν¨ν΄μ΄ λΆλͺ
ν΄μΌ νλ€. (status, id)μ (id, status) μ€ μ΄λ μͺ½μ΄ λ μ’μμ§λ μΈλ±μ€ μμ²΄κ° μλλΌ μ ν리μΌμ΄μ
μ΄ λ°μ΄ν°λ₯Ό μ°Ύλ λ°©μμ λ°λΌ λ¬λΌμ§λ€.
AIκ° μ½λλ₯Ό λΉ λ₯΄κ² ꡬνν΄μ£Όλ μλμΌμλ‘ μ΄μ νκ²½μ κ΄μ°°νκ³ μ€μ λ³λͺ©μ μ μνλ©° κ°μ μ νλ₯Ό κ²μ¦νλ κ°λ°μμ μν μ λ μ€μν΄μ§κ³ μλ€.
κ²°κ΅ μΈλ±μ€λ λ§μ΄ μΆκ°νλ κ²μ΄ λͺ©νκ° μλλΌ, λ°λ³΅λλ μ‘°ν κ²½λ‘λ₯Ό μ μ λΉμ©μΌλ‘ νννλ λꡬμ κ°κΉλ€.