# 🗄️ Cheatsheet: Database cho vibe coder: index, N+1 và backup

By Better Wise

> This cheatsheet is premium content. Sign in and purchase the course to view the full content.

> **Note:** 
> Nguyên tắc xuyên suốt: **đo trước khi đoán**. Đừng tin "truy vấn này nhanh" hay "index này chắc ổn" nếu chưa nhìn EXPLAIN và chưa đo thời gian thật.

---

## Module 1: Đọc hiệu năng truy vấn AI viết

### 1.1 Index là gì và khi nào nên thêm

**Index = cấu trúc dữ liệu phụ (thường là B-tree) giúp tìm hàng nhanh mà không quét cả bảng.**

| Khái niệm | Ý nghĩa thực dụng |
| --- | --- |
| Index trên cột | Tăng tốc `WHERE`, `JOIN`, `ORDER BY` trên cột đó |
| Full table scan | Không có index phù hợp, DB đọc từng hàng |
| Composite index | Index nhiều cột, thứ tự cột quan trọng |
| Covering index | Index chứa đủ cột truy vấn cần, không phải quay lại bảng |
| Index dư thừa | Index không truy vấn nào dùng, chỉ tốn chỗ và làm chậm ghi |

**Khi nào NÊN thêm index:**
- Cột thường xuyên xuất hiện trong `WHERE`, `JOIN ... ON`, `ORDER BY`.
- Cột có độ chọn lọc cao (nhiều giá trị khác nhau, ví dụ `email`, `user_id`).
- Bảng lớn và truy vấn đọc nhiều hơn ghi.

**Khi nào KHÔNG nên thêm (hoặc cân nhắc):**
- Bảng nhỏ (vài trăm hàng): scan còn nhanh hơn.
- Cột ít giá trị phân biệt (ví dụ `is_active` chỉ true/false).
- Bảng ghi rất nhiều: mỗi index làm `INSERT`/`UPDATE`/`DELETE` chậm thêm.
- Đã có composite index phủ cột đó (tránh index trùng).

> **Tip:** 
> AI hay thêm index "cho chắc". Hãy hỏi ngược: truy vấn nào dùng index này? Nếu không trả lời được, đừng thêm.

**Cú pháp cơ bản:**

```sql
-- Tạo index đơn
CREATE INDEX idx_users_email ON users (email);

-- Composite index: thứ tự cột quyết định khả năng dùng
CREATE INDEX idx_orders_user_created ON orders (user_id, created_at);

-- Index unique
CREATE UNIQUE INDEX idx_users_email_unique ON users (email);
```

Quy tắc composite: index `(a, b)` dùng được cho `WHERE a = ...`, `WHERE a = ... AND b = ...`, nhưng **không** dùng tốt cho `WHERE b = ...` một mình.

---

### 1.2 Đọc EXPLAIN cơ bản

**Mục tiêu: biết truy vấn có dùng index hay đang quét cả bảng.**
