Tham khảo liên kết bên dưới để biết thêm chi tiết
https://dev.mysql.com/doc /refman/8.0/en/table-scan-avoidance.html
nguyên nhân của việc quét toàn bộ bảng ở bên dưới
-
Bảng quá nhỏ nên việc quét bảng sẽ nhanh hơn so với việc tra cứu khóa. Điều này thường xảy ra đối với các bảng có ít hơn 10 hàng và độ dài hàng ngắn.
-
Không có giới hạn khả dụng nào trong mệnh đề ON hoặc WHERE đối với các cột được lập chỉ mục.
-
Bạn đang so sánh các cột được lập chỉ mục với các giá trị không đổi và MySQL đã tính toán (dựa trên cây chỉ mục) rằng các hằng số bao phủ một phần quá lớn của bảng và quá trình quét bảng sẽ nhanh hơn
-
Bạn đang sử dụng khóa có số lượng thấp (nhiều hàng khớp với giá trị khóa) qua một cột khác. Trong trường hợp này, MySQL giả định rằng bằng cách sử dụng khóa, nó có thể sẽ thực hiện nhiều tra cứu khóa và quá trình quét bảng sẽ nhanh hơn.
để tránh sử dụng toàn bộ bảng dưới đây:
-
Sử dụng ANALYZE TABLE tbl_name để cập nhật các bản phân phối chính cho bảng đã quét.
-
Sử dụng FORCE INDEX cho bảng được quét để cho MySQL biết rằng việc quét bảng rất tốn kém so với việc sử dụng chỉ mục đã cho:
ví dụ. CHỌN * TỪ t1, t2 FORCE INDEX (index_for_column) WHERE t1.col_name =t2.col_name;