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á
ALLfull table scanTệ
indexfull index scan-
rangerange scan trên indexKhá
refindex lookupTốt
consttìm đúng 1 row qua unique indexTuyệ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