MySQL: Too many keys specified. Max 64 keys allowed
作者:Hily 原始链接:http://hily.me/blog/2008/04/mysql-too-many-keys-specified-max-64-keys-allowed/
版权声明:可以转载,转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
在建立一个索引数量大于 64 个的表时,MySQL 报错:
“#1069 - Too many keys specified; max 64 keys allowed”
这是因为 MySQL 默认最大允许在一个表中建立 64 个索引,一般情况表的索引数量是不会超过 64 个的,可惜偏偏俺碰上了。
从 MySQL 论坛上找到一个说法:
http://forums.mysql.com/read.php?22,53666,53666
说是修改源代码中的 'sql/unireg.h',将 MAX_KEY 改为你希望的值就可以了。
这样重新编译后发现,仍然有 64 keys 的限制。
还是自己想办法,发现 'sql/unireg.h' 中定义 MAX_KEY 为 MAX_INDEXES,估计是 MAX_INDEXES 设置有问题。
在源代码目录下运行:
grep -r 'MAX_INDEXES' ./
发现有这么一条:
./config.h:#define MAX_INDEXES 64
怎么是在 config.h 里?很明显,是由 ./configure 生成的。
运行:
./configure --help
果然有这么一项配置:
--with-max-indexes=\# Sets the maximum number of indexes per table, default 64
make distclean 清除编译工作文件重新配置编译,问题解决。
我使用的 MySQL 版本是 mysql-5.0.45,旧版本要解决这个问题,可能需要通过修改上述的 'sql/unireg.h' 来解决这个问题。
最后附上几种平台下几种版本 MySQL 的默认 key 数量限制情况:
(摘自:http://mike.kruckenberg.com/archives/2006/06/limit_on_number_1.html)
- MySQL 3.23.58 on AMD Athlon XP - 32 key limit
- MySQL 4.0.23 on Intel - 32 key limit
- MySQL 4.0.23 (64bit) on Dual Opteron - 32 key limit
- MySQL 4.1.20 on Intel - 64 key limit
- MySQL 4.1.20 (64bit) on Dual Opteron - 64 key limit
- MySQL 5.0.20 on Dual-Core Intel Mac - 64 key limit
-- EOF --

