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 --

发表一下您的高见

If you have any question, or for the language problem, please fell free to leave a comment or just contact me with email: hilyjiang [At] Gmail.