Mysql
一個 MEMORY 表會佔用多少記憶體?
假設我有一個 MyISAM 表,其數據長度為 4.8GB,索引長度為 6.2GB。因此,總數據大小為 11 個演出。這需要多少記憶體,我是否將其轉換為
MEMORY
表格?11演出,或更多?
行的確切記憶體需求由以下公式計算:
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*))
ALIGN() 表示一個向上取整因子,以使行長度是 char 指針大小的精確倍數。sizeof(char*) 在 32 位機器上為 4,在 64 位機器上為 8。
因此,在 64 位機器上,替換
sizeof(char*)
為 8。
length_of_row
您可以從資訊模式中獲得估計:SELECT TABLE_ROWS, AVG_ROW_LENGTH FROM information_schema.tables WHERE table_schema='foo' AND table_name='bar';
然後將所有 BTREE 密鑰和 HASH 密鑰相加。請注意,將任何鍵轉換為 HASH 在空間方面可能是值得的,因為它們需要更少的記憶體。
我要提到最大記憶體大小的限制取決於
max_heap_table_size
,但gbn打敗了我。