EXPLAIN cho thấy kế hoạch mà optimizer đã chọn — cách nó sẽ truy cập từng table — mà không chạy truy vấn. Bạn đọc nó để xác nhận index được dùng và ít row bị xét.
EXPLAIN cho thấy kế hoạch mà optimizer đã chọn — cách nó sẽ truy cập từng table — mà không chạy truy vấn. Bạn đọc nó để xác nhận index được dùng và ít row bị xét.
const / eq_ref / ref (index lookup, tốt) → range → index (full index scan) → ALL (full table scan, cờ đỏ).NULL = không có).Using index (covering, tuyệt), Using filesort / Using temporary (sắp xếp/gom nhóm trong bộ nhớ hoặc trên disk — thường tối ưu được).EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- +------+------+------+---------+--------+----------------+
-- | type | key | rows | Extra |
-- | ALL | NULL | 900k | Using where; Using filesort | <- quét tất cả, phải sort
-- +------+------+------+---------+--------+----------------+
-- Thêm index phủ cả điều kiện lọc VÀ thứ tự sort:
CREATE INDEX idx_cust_created ON orders (customer_id, created_at);
EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- | type | key | rows | Extra |
-- | ref | idx_cust_created | 30 | Using where | <- seek 30 row, không filesort
Index đã biến một lần quét ALL 900k row thành một lần seek ref 30 row, và vì created_at là cột thứ hai, các row trả về đã được sắp sẵn — filesort biến mất.
Dùng EXPLAIN ANALYZE (MySQL 8) để thấy thêm thời gian thực tế và số row thật, bắt được các trường hợp ước lượng sai.
EXPLAIN là cách bạn thay việc đoán mò bằng bằng chứng. Phát hiện type: ALL, một rows khổng lồ, hay Using filesort cho bạn biết chính xác chỗ nào thiếu index — con đường nhanh nhất từ "trang này chậm" tới một bản vá đúng chỗ.
Thư viện câu hỏi phỏng vấn IT với đáp án chi tiết — từ Junior đến Senior.
Ủng hộ