Open BookDang opened 2 hours ago
EXPLAIN
id
select_type
SIMPLE
PRIMARY
SUBQUERY
WHERE
SELECT
DERIVED
FROM
UNION
DEPENDENT SUBQUERY
table
type
system
const
eq_ref
ref
range
BETWEEN
IN
index
ALL
possible_keys
NULL
key
key_len
rows
filtered
Extra
Using where
Using index
Using temporary
GROUP BY
ORDER BY
Using filesort
No tables
SELECT NOW()
Truy vấn:
EXPLAIN SELECT * FROM Products WHERE category = 'Electronics' AND price > 100;
Giải thích:
type: ref
idx_category
category
key_len: 52
price
rows: 100
filtered: 50%
price > 100
Extra: Using where
Hiểu đúng các thông số từ EXPLAIN sẽ giúp bạn tối ưu hóa hiệu quả truy vấn trong MySQL!
EXPLAIN
1.
id
id
, chúng được thực hiện theo thứ tự từ trên xuống.2.
select_type
SIMPLE
: Truy vấn không có con hoặc không sử dụng UNION.PRIMARY
: Truy vấn chính (outermost query).SUBQUERY
: Một truy vấn con trongWHERE
hoặcSELECT
.DERIVED
: Truy vấn con trongFROM
(còn gọi là bảng tạm).UNION
: Một phần của truy vấn UNION.DEPENDENT SUBQUERY
: Truy vấn con phụ thuộc vào bên ngoài.3.
table
4.
type
system
: Bảng chỉ có một hàng (nhanh nhất).const
: Chỉ lấy một hàng (thường cho các truy vấn tìm kiếm bằng khóa chính).eq_ref
: Kết nối bằng khóa chính hoặc khóa unique.ref
: Tìm kiếm với giá trị không phải khóa unique.range
: Quét các giá trị trong phạm vi (ví dụ:BETWEEN
hoặcIN
).index
: Duyệt toàn bộ index, không phải toàn bộ bảng.ALL
: Duyệt toàn bộ bảng (kém hiệu quả nhất).5.
possible_keys
NULL
, MySQL không tìm thấy chỉ mục nào phù hợp.6.
key
NULL
.7.
key_len
8.
ref
const
nếu tìm kiếm với giá trị cố định.9.
rows
10.
filtered
WHERE
.WHERE
) được sử dụng.11.
Extra
Using where
: MySQL sử dụng điều kiệnWHERE
để lọc hàng.Using index
: Chỉ mục được sử dụng để trả về dữ liệu (không truy cập bảng).Using temporary
: MySQL tạo một bảng tạm (thường xảy ra vớiGROUP BY
hoặcORDER BY
).Using filesort
: MySQL thực hiện sắp xếp (không dùng index).No tables
: Truy vấn không sử dụng bảng nào (ví dụ:SELECT NOW()
).Ví dụ cụ thể:
Truy vấn:
Giải thích:
type: ref
: Dùng chỉ mụcidx_category
để tìm giá trịcategory
.key_len: 52
: Chỉ mục dài 52 byte (kết hợp giữacategory
vàprice
).rows: 100
: MySQL dự đoán sẽ đọc 100 hàng.filtered: 50%
: Một nửa số hàng tìm được phù hợp với điều kiệnprice > 100
.Extra: Using where
: Dữ liệu phải được lọc thêm sau khi đọc từ chỉ mục.Hiểu đúng các thông số từ
EXPLAIN
sẽ giúp bạn tối ưu hóa hiệu quả truy vấn trong MySQL!