我在 Macosx 上使用 mariadb10.0.3 和 brew。
我的一张表有 40 个布尔列,我想在这些列上添加索引。但是,我在创建索引 ddl 时出错。错误消息如下。
ERROR 1070 (42000):指定的关键部分太多;最多允许 32 个零件
如何创建 MAX-INDEXES ?
索引数量的限制是按存储引擎设置的,并且在常规使用中不能更改。编译时有一个 --with-max-indexes 参数。
但是你真的需要看看你的表和索引结构。拥有 40 个布尔字段索引不太可能有任何帮助。
不幸的是 MySQL 有一些任意的编译时间限制。关键部分的默认限制是 16。大多数 RDBMS 允许您在启动时设置这种限制,而不是编译时。在 MySQL 中使用雪花非常困难。
不幸的是,像周围的许多人所建议的那样,添加--with-max-indexes
意志./configure
并不能解决问题:
./configure --prefix=/usr/local/mysql --with-max-indexes=N
上面的行是无害的。
最大索引与外键有关,但较小的 fromMAX_REF_PARTS
和MAX_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(这是一个带有任意限制的笑话)。