EXPLAIN - Công cụ debug số 1
Trước khi đoán lý do query chậm, hãy XEM database đang làm gì.
-- PostgreSQL (chạy thật + đo thời gian):
EXPLAIN ANALYZE SELECT * FROM users WHERE email = '[email protected]';
-- Kết quả cho thấy: plan được chọn, số row ước tính vs thực tế, thời gian
-- MySQL:
EXPLAIN SELECT * FROM users WHERE email = '[email protected]';Đọc cột type của MySQL EXPLAIN
| type | Ý nghĩa | Đánh giá |
|---|---|---|
ALL | full table scan | Tệ |
index | full index scan | - |
range | range scan trên index | Khá |
ref | index lookup | Tốt |
const | tìm đúng 1 row qua unique index | Tuyệt vời |
Thói quen nên có
- Chạy EXPLAIN cho mọi query quan trọng trước khi deploy lên production.
- Sau khi tạo index: xác nhận database thực sự dùng index đó, và kiểm tra số row examined vs số row trả về - nếu examined >> trả về → index chưa đủ tốt (Có Index chưa chắc Query nhanh).
- Số row ước tính lệch xa thực tế (trong EXPLAIN ANALYZE) → dấu hiệu thống kê cũ.
- EXPLAIN còn dùng làm fast row count estimate: đọc “rows” từ output thay vì COUNT(*) chính xác (xem Query Tips hữu ích).
Liên quan
- Query Optimizer và Cost Model - thứ mà EXPLAIN cho bạn nhìn vào
- Unused Index - kiểm tra index có được dùng qua thời gian