表中的指针大小是多少?

时间:2016-02-04 09:56:42

标签: mysql database pointers myisam

正如某处写的那样 -

  

在MySQL中创建的具有可变长度行的MyISAM表是   配置         默认情况下,使用6字节指向数据的方式处理256TB数据         记录。早期的MySQL版本默认为4字节指针,最多可容纳4GB数据。

6字节或4字节指针是什么意思,指针保持引用是什么意思。解释?

2 个答案:

答案 0 :(得分:1)

指针是保存数据库数据的文件中的位置。当表的模式包括可变长度列(例如VARCHAR字符串)时,行的数据不一定在保存表的文件中的连续块中。当更新行时,它可能不适合其旧空间,因为列已增长。在这种情况下,行被分开;可以在旧空间中存储多列,而多余的列存储在文件中新分配的空间中。

这要求它在文件的不同部分之间有指针,以指示行的每个部分的位置。这些指针现在是6个字节。

答案 1 :(得分:1)

请参阅VARIABLE myisam_data_pointer_size

@Barmar只提供了故事的一部分。 "指针"也用于索引。索引(在.MYI文件中),甚至是PRIMARY KEY,'积分'进入数据(.MYD)。它指向数据记录的开头。 (从那里开始,记录可能会或许多不会像Barmer讨论的那样分散。)

在早期,变量默认为4个字节。这导致神话,MySQL表限制为4GB(4字节指针可以解析的最大值)。 myisam_data_pointer_size的当前默认值为6,导致256TB的巨大限制。最大值为7,导致更大的限制。

此指针限制适用于DYNAMIC MyISAM模式。对于FIXED(没有VARCHAR,没有TEXT等),还有另一种设置。 (我忘了这个名字。)我认为它的默认值是1。因此,使用默认值将FIXED表限制为1T (无论FIXED大小是什么)。使用FIXED时,碎片不存在,并且“指针”指向“{1}}。是"行号"不是"字节偏移"。

My 'Limits' blog

TMI?