Cheatsheet: Database cho vibe coder: index, N+1 và backup
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_activechỉ true/false). - Bảng ghi rất nhiều: mỗi index làm
INSERT/UPDATE/DELETEchậ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:
-- 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.
This cheatsheet is premium content. Sign in and purchase the course to view the full content. Sign in