Bạn nên điều chỉnh cách bạn tạo và tải bảng
CREATE TABLE sns_memory SELECT * FROM sns WHERE 1=2;
ALTER TABLE sns_memory ENGINE=MEMORY;
INSERT INTO sns_memory SELECT * FROM sns;
DROP TABLE sns;
ALTER TABLE sns_memory RENAME sns;
Điều này sẽ vượt qua mọi giới hạn áp đặt bởi tmp_table_size và max_heap_table_size .
Cũng giống như vậy, bạn cần làm hai điều:
Thêm cái này vào /etc/my.cnf
[mysqld]
tmp_table_size=2G
max_heap_table_size=2G
điều này sẽ bao gồm việc khởi động lại mysql. Để đặt các giá trị này trong mysqld ngay bây giờ mà không cần khởi động lại, hãy chạy cái này:
SET GLOBAL tmp_table_size = 1024 * 1024 * 1024 * 2;
SET GLOBAL max_heap_table_size = 1024 * 1024 * 1024 * 2;
Nếu bạn đang kiểm tra các biến trên với
SELECT @@max_heap_table_size;
hoặc
SHOW VARIABLES LIKE 'max_heap_table_size';
bạn có thể nhận thấy rằng chúng dường như không thay đổi sau SET GLOBAL...
các câu lệnh. Điều này là do cài đặt chỉ áp dụng cho các kết nối mới đến máy chủ. Tạo một kết nối mới và bạn sẽ thấy các giá trị cập nhật hoặc bạn có thể thay đổi nó trong phiên của mình bằng cách chạy:
SET tmp_table_size = 1024 * 1024 * 1024 * 2;
SET max_heap_table_size = 1024 * 1024 * 1024 * 2;