gpt4 book ai didi

mysql - 克服 MyISAM 表中 2^32 行的 MySQL 限制

转载 作者:可可西里 更新时间:2023-11-01 08:01:03 25 4
gpt4 key购买 nike

我想在 MySQL 中创建一个 MyISAM 表(尝试了 5.0.x 和 5.1.x 的各种版本),它允许超过 2^32 行。实现这一点的方法是让 MySQL 使用 8 字节而不是 4 字节的行指针。

这是 MySQL 手册中的引述:

If you build MySQL with the --with-big-tables option, the row limitation is increased to 1.844E+19 rows. See Section 2.3.2, “Typical configure Options”. Binary distributions for Unix and Linux are built with this option.

听起来很简单,对吧?但是我已经尝试了 Linux x86_64 的各种二进制发行版,并且还使用“--with-big-tables”选项从源代码构建了 MySQL。在每种情况下,我仍然无法超出 2^32 的限制。我这样创建一个表:

CREATE TABLE big (col int) MAX_ROWS=1099511627776

当我检查表格状态时,它说:

Create_options: max_rows=4294967295

如何逃离 32 位炼狱?使用 InnoDB 可能会解决问题,但对于我正在运行的查询类型,它的执行速度要慢得多。

仅供引用,这是一个没有解决问题的重要引用:

http://jeremy.zawodny.com/blog/archives/000796.html

最佳答案

我自己解决了这个问题,答案既简单又荒谬。

如果您在创建 MyISAM 表时省略 MAX_ROWS 设置,则该表不会受到 2^32 行限制的影响。相反,最大行数由指针大小决定,指针大小本身由全局变量 myisam_data_pointer_size 决定。

默认情况下,在 Linux/Unix 上运行的现代 MySQL 构建中,myisam_data_pointer_size 为 6,这导致在具有固定行宽的表上限制为 2^48 行(或在具有动态行的表上限制为 2^48 字节)。但您也可以使用类似的方式更改它:

SET GLOBAL myisam_data_pointer_size=5;

并使用以下方法检查:

SHOW VARIABLES LIKE 'myisam_data_pointer_size';

在具有固定宽度行的 MyISAM 表中,最大行数等于 (2^(8* myisam_data_pointer_size))-1,在创建表时给定 myisam_data_pointer_size。

关于mysql - 克服 MyISAM 表中 2^32 行的 MySQL 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3229181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com