Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sử dụng từ khóa EXPLAIN trong MySQL để phân tích kế hoạch thực thi truy vấn

EXPLAIN là công cụ chẩn đoán hiệu năng quan trọng nhất trong MySQL. Nó hiển thị **kế hoạch thực thi (execution plan)** – cách MySQL dự định truy cập dữ liệu: dùng index nào, quét bao nhiêu hàng, join theo thứ tự nào, v.v.

Cú pháp

EXPLAIN SELECT ... FROM ... WHERE ...;

Hỗ trợ: SELECT, INSERT, UPDATE, DELETE, REPLACE.

Ví dụ minh họa

Tạo bảng sinh viên và index trên StudentId:

mysql> CREATE TABLE DemoTable1488 (
    -> StudentId INT,
    -> StudentName VARCHAR(20),
    -> StudentAge INT
    -> );
mysql> CREATE INDEX student_id_index ON DemoTable1488(StudentId);

Chèn dữ liệu:

mysql> INSERT INTO DemoTable1488 VALUES
    -> (101, 'Sam', 21),
    -> (102, 'Bob', 23),
    -> (103, 'David', 20);

Chạy EXPLAIN cho truy vấn tìm ID = 1:

mysql> EXPLAIN SELECT * FROM DemoTable1488 WHERE StudentId = 1;

Kết quả (đã rút gọn các cột quan trọng):

+----+-------------+---------------+------+------------------+------------------+---------+-------+------+----------+-------+
| id | select_type | table         | type | possible_keys    | key              | key_len | ref   | rows | filtered | Extra |
+----+-------------+---------------+------+------------------+------------------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | DemoTable1488 | ref  | student_id_index | student_id_index | 5       | const |    1 |   100.00 | NULL  |
+----+-------------+---------------+------+------------------+------------------+---------+-------+------+----------+-------+

Giải thích các cột quan trọng

CộtÝ nghĩaTốtXấu
typeLoại truy cậpconst, eq_ref, ref, rangeALL (full table scan), index
possible_keysIndex có thể dùngCó tên indexNULL
keyIndex thực sự dùngTên indexNULL
rowsƯớc lượng hàng quétNhỏ (1, 10, 100)Lớn (gần tổng số hàng)
ExtraThông tin thêmUsing index, Using whereUsing filesort, Using temporary

Trong ví dụ: type=ref, key=student_id_index, rows=1 → **rất tốt**, dùng index tìm chính xác 1 hàng.

EXPLAIN ANALYZE (MySQL 8.0.18+)

Thêm ANALYZE để chạy thật và đo thời gian thực:

EXPLAIN ANALYZE SELECT * FROM DemoTable1488 WHERE StudentId = 1;

Sẽ hiển thị actual time, actual rows, loops – chính xác hơn ước lượng.