Yêu cầu bộ nhớ chính xác của một hàng được tính từ công thức sau:
SUM_OVER_ALL_BTREE_KEYS(max_length_of_key + sizeof(char*) × 4)
+ SUM_OVER_ALL_HASH_KEYS(sizeof(char*) × 2)
+ ALIGN(length_of_row+1, sizeof(char*))
[src]
ALIGN () đại diện cho hệ số làm tròn để làm cho độ dài hàng là bội số chính xác của kích thước con trỏ char. sizeof (char *) là 4 trên máy 32 bit và 8 trên máy 64 bit.
Vì vậy, trên máy 64 bit, thay thế sizeof(char*)
bằng 8.
Bạn có thể lấy ước tính length_of_row
từ Lược đồ thông tin:
SELECT TABLE_ROWS, AVG_ROW_LENGTH FROM information_schema.tables WHERE table_schema='foo' AND table_name='bar';
Sau đó, bạn thêm tất cả các khóa BTREE và sau đó là các phím HASH. Lưu ý rằng việc chuyển đổi bất kỳ khóa nào sang HASH có thể là điều đáng làm, vì chúng cần ít bộ nhớ hơn.
Tôi sẽ đề cập đến giới hạn kích thước NHỚ tối đa phụ thuộc vào max_heap_table_size
, nhưng gbn đã đánh bại tôi với nó.