Lập trình 23/10/2026 7 phút

Secondary index đo thật: lấy 100 dòng qua index phụ nhưng cần cột ngoài index phải tra ngược về khóa chính 100 lần, chạm 410 trang — còn truy vấn phủ chỉ chạm 10 trang, và quá ~10% số dòng thì MySQL bỏ index quét cả bảng

Phần 4 sê-ri MySQL và InnoDB: secondary index lưu giá trị khóa chính chứ không lưu địa chỉ hàng, nên tra theo index phụ mà cần cột ngoài index phải đi hai cây — index phụ rồi tra ngược về clustered index từng dòng (bookmark lookup). Đo thật trong mysql:8: lấy 100 dòng theo cust=5000 có kèm payload chạm 410 trang, còn truy vấn phủ chỉ cần id thì Using index, không tra ngược, chỉ chạm 10 trang — ít hơn 41 lần. Vì mỗi dòng thêm một lần tra ngược, qua ngưỡng ~10–15% số dòng MySQL bỏ hẳn index mà quét cả bảng: cust<1000 vẫn dùng index, cust<1500 chuyển full scan.