【问题标题】:Error too many keys specified; max 64 keys allowed错误指定的键太多;最多允许 64 个键
【发布时间】:2013-06-03 12:36:26
【问题描述】:

我收到以下 MySQL 错误:

Too many keys specified; max 64 keys allowed.

是否可以增加 MySQL 中的最大索引大小,如果可以,我们该如何做?

【问题讨论】:

标签: mysql


【解决方案1】:

鉴于此处的回复:mysql error 1069 Too many keys specified; max 64 keys allowed 在这里http://forums.mysql.com/read.php?22,53666,53666(2005 年的旧线程,但仍然相关),似乎重新编译和发布似乎是您唯一的选择。

如果您的主机不允许您手动部署 mySql 安装,这当然很困难。

【讨论】:

  • 这已经回答了你的问题(+1),但我想补充一点,有一个包含 64 个以上键的表很可能没有像它应该的那样标准化。在极端情况下,您可以将表水平划分为两个表,每个表有 64 个键,但我宁愿解决规范化问题。
  • 您好,如果我们将数据库表的最大索引数增加到 80 或 100,可能会产生什么影响? dba.stackexchange.com/questions/249472/…
【解决方案2】:

选项1)增加MAX_KEY value in 'sql/unireg.h'并重新编译代码

选项 2)您可以在配置阶段指定它,即:

./configure --prefix=/usr/local/mysql --with-charset=cp1251 --enable-thread-safe-client --with-max-indexes=256 

检查这个link out

【讨论】:

  • 您好,如果我们将数据库表的最大索引数增加到 80 或 100,可能会产生什么影响? dba.stackexchange.com/questions/249472/…
  • 您好我想使用方法二但是我不知道在哪里执行它。你能告诉我如何运行它吗?谢谢
【解决方案3】:

从文档中:“每个 MyISAM 表的最大索引数是 64。这可以通过重新编译来更改。从 MySQL 5.0.18 开始,您可以通过使用 --with-max-indexes 调用 configure 来配置构建=N 选项,其中 N 是每个 MyISAM 表允许的最大索引数。N 必须小于或等于 128。在 MySQL 5.0.18 之前,您必须更改源。"

因此,我们假设您使用的是 MyISAM。如果使用 InnoDB,只要数据长度在 3072 字节限制内,就可以获得任意数量的键。

为什么你有这么多钥匙?您可以重新设计以减少使用量吗?

【讨论】:

  • @D Mac 谢谢,我们是大公司的平台提供商之一,我们的一些数据库模式正在动态生成。所以我们的一些客户遇到了这个问题,他们在一些表中有超过 70 列需要索引。
  • 那么使用 with-max-indexes 重新配置 MySQL 可能是值得的。
  • 是的,我们最终决定最好的选择是在部署任何需要索引的列之前重新配置我们的 MySQL 并添加新的验证。在这里我要再次感谢你。
  • 在需要优化的时候容易需要更多的key ORDER BY
  • 我不认为这是准确的:“如果您使用 InnoDB,只要数据长度在 3072 字节限制内,您就可以获得任意数量的键。”因为来自dev.mysql.com/doc/refman/8.0/en/innodb-limits.html:“一个表最多可以包含64个二级索引。”因此,无论数据长度如何,即使 InnoDB 仍然卡在 64 个最大(二级)索引。
猜你喜欢
  • 2011-06-28
  • 1970-01-01
  • 2017-11-05
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
相关资源
最近更新 更多