Mysql

一個 MEMORY 表會佔用多少記憶體?

  • August 31, 2017

假設我有一個 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*)) 

$$ src $$

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打敗了我。

引用自:https://dba.stackexchange.com/questions/11912