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

Kiến trúc InnoDB đo thật: bảng CHÍNH LÀ clustered index — tra theo khóa chính chạm đúng 1 dòng trong 0,015 ms, còn lọc theo cột không index phải duyệt cả 1.000.001 dòng lá mất 161 ms

Bài mở đầu sê-ri MySQL và InnoDB: vì sao trong InnoDB, bảng không nằm cạnh index mà bảng CHÍNH LÀ clustered index — một cây B+ khóa theo khóa chính, lá chứa trọn hàng. Đo thật trong container mysql:8 trên bảng một triệu dòng: tra theo khóa chính là một lần đi xuống cây (Handler_read_key=1, type=const, 0,015 ms), còn lọc theo cột không index phải duyệt sạch 1.000.001 dòng lá (Handler_read_rnd_next=1.000.001, 161 ms) vì không có heap riêng để nhảy tới. Hàng luôn nằm vật lý theo thứ tự khóa chính: bảng chèn khóa ngẫu nhiên vẫn trả về theo thứ tự PK, và quét một dải PK là đi tuần tự trên lá.