我有一个MyISAM表,它只包含一个字段,一个SMALL INT。该字段有一个索引,有560万条记录。
所以理论上5.6mil * 2字节(smallint)= 11MB(约),但表的数据文件是40MB,为什么这么不同呢?
索引文件占用46MB,会不会比数据文件大?
这是创建表:
CREATE TABLE `key_test` (
`key2` smallint(5) unsigned NOT NULL DEFAULT '0',
KEY `key2` (`key2`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
答案 0 :(得分:0)
有一些开销。
首先,一些可控制的变量':
myisam_data_pointer_size
默认为6(字节)
myisam_index_pointer_size
默认为少于1。
对于数据(.MYD
):
NULLable
列的N个字节。 (你的桌子N = 0。)DELETEd
行留下空白。所以:1 + MAX(row_length,6)=每行7个字节。
如果您有3 SMALLINTs
,则表格大小相同。
索引(.MYI
):
myisam_index_pointer_size
)控制。所以:row_length +每条记录6,加上一些开销。 46M听起来像是对数据进行了排序,以便建立索引"按顺序"。
除此之外,我对MyISAM细节的记忆正在消失。