Tôi có bảng MySQL sử dụng công cụ MyISAM với 6 cột INT, 1 cột SMALLINT, 2 TINYINT và 1 cột FLOAT. Nó có hàng tỷ hàng (tệp dữ liệu là 100GB). Tôi đã cố gắng lập chỉ mục trên tất cả của các cột bằng cách bật khóa nhưng điều đó không bao giờ xảy ra. Cố gắng "myisamchk -r tableName" cho các lỗi sau:Sửa chữa/lập chỉ mục Bảng Lớn và myisam_sort_buffer_size
- recovering (with sort) MyISAM-table 'tableName'
Data records: 662929483
- Fixing index 1
myisamchk: error: myisam_sort_buffer_size is too small
MyISAM-table 'tableName' is not fixed because of errors
Try fixing it by using the --safe-recover (-o), the --force (-f) option or by not using the --quick (-q) flag
Sử dụng "myisamchk -rov tableName" thay vì phải mất vĩnh viễn một lần nữa (có lẽ vì nó được sử dụng phương pháp keycache, không phải là cách sắp xếp).
Không có ý nghĩa khi tăng myisam_sort_buffer_size trong trường hợp này (Câu trả lời cho myisam_sort_buffer_size vs sort_buffer_size cho thấy việc tăng giá trị không bao giờ có ý nghĩa). Máy có RAM 32GB.
(lý tưởng?) Giá trị sort_buffer_size sẽ có thể giữ chỉ số + một số chi phí lớn nhất - không phải là tổng của tất cả các chỉ số, nhưng kích thước thuộc loại lớn nhất. Tôi đã gặp lỗi phân đoạn khi bộ đệm không đủ lớn. – user3127882