0

我在 Macosx 上使用 mariadb10.0.3 和 brew。

我的一张表有 40 个布尔列,我想在这些列上添加索引。但是,我在创建索引 ddl 时出错。错误消息如下。

ERROR 1070 (42000):指定的关键部分太多;最多允许 32 个零件

如何创建 MAX-INDEXES ?

4

2 回答 2

2

索引数量的限制是按存储引擎设置的,并且在常规使用中不能更改。编译时有一个 --with-max-indexes 参数。

但是你真的需要看看你的表和索引结构。拥有 40 个布尔字段索引不太可能有任何帮助。

于 2013-08-12T09:36:59.243 回答
0

不幸的是 MySQL 有一些任意的编译时间限制。关键部分的默认限制是 16。大多数 RDBMS 允许您在启动时设置这种限制,而不是编译时。在 MySQL 中使用雪花非常困难。

不幸的是,像周围的许多人所建议的那样,添加--with-max-indexes意志./configure并不能解决问题:

./configure --prefix=/usr/local/mysql --with-max-indexes=N

上面的行是无害的。

最大索引与外键有关,但较小的 fromMAX_REF_PARTSMAX_INDEXES.

似乎有效的是MAX_REF_PARTS在 sql/sql_const.h 上从 16U 更改为 42U:

$ grep -R MAX_REF_PARTS ${MYSQL_SOURCE_FOLDER}
$ ./sql/sql_const.h:#define MAX_REF_PARTS 42U           /* Max parts used as ref */

众所周知,42 是一个更好的任意限制,因为无论如何它都是最终问题的答案:p(这是一个带有任意限制的笑话)。

于 2015-02-24T16:34:58.557 回答