And*_*rew 7 mysql myisam 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*))
Run Code Online (Sandbox Code Playgroud)
ALIGN() 表示一个向上取整因子,使行长度成为字符指针大小的精确倍数。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';
Run Code Online (Sandbox Code Playgroud)
然后你把你所有的 BTREE 键加起来,然后是 HASH 键。请注意,将任何键转换为 HASH 在空间上可能是值得的,因为它们需要更少的内存。
我打算提到依赖于 的最大内存大小的限制max_heap_table_size
,但gbn击败了我。
归档时间: |
|
查看次数: |
7914 次 |
最近记录: |