正如某处写的那样 -
在MySQL中创建的具有可变长度行的MyISAM表是 配置 默认情况下,使用6字节指向数据的方式处理256TB数据 记录。早期的MySQL版本默认为4字节指针,最多可容纳4GB数据。
6字节或4字节指针是什么意思,指针保持引用是什么意思。解释?
答案 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}}。是"行号"不是"字节偏移"。
TMI?