Database 索引的总大小太大或informix中的索引部分太多

Database 索引的总大小太大或informix中的索引部分太多,database,indexing,informix,ddl,Database,Indexing,Informix,Ddl,我正在尝试在informix上运行以下脚本: CREATE TABLE REG_PATH ( REG_PATH_ID SERIAL UNIQUE, REG_PATH_VALUE LVARCHAR(750) NOT NULL, REG_PATH_PARENT_ID INTEGER, REG_TENANT_ID INTEGER DEFAULT 0, PRIMARY KEY(REG_PATH_ID, REG_TENANT_ID) CONSTRAINT PK_RE

我正在尝试在informix上运行以下脚本:

CREATE TABLE REG_PATH (
    REG_PATH_ID SERIAL UNIQUE,
    REG_PATH_VALUE LVARCHAR(750) NOT NULL,
    REG_PATH_PARENT_ID INTEGER,
    REG_TENANT_ID INTEGER DEFAULT 0,
    PRIMARY KEY(REG_PATH_ID, REG_TENANT_ID) CONSTRAINT PK_REG_PATH
);

CREATE INDEX IDX1 ON REG_PATH(REG_PATH_VALUE, REG_TENANT_ID);
但它给出了以下错误:

517:索引的总大小太大或索引中的部分太多

我使用的是informix版本11.50FC9TL。我的dbspace块大小是5M

此错误的原因是什么?如何修复它?

来自:

在复合索引中最多可以包含16列。单个复合索引中所有索引列的总宽度不能超过380字节

要添加到索引中的列之一是
REG\u PATH\u VALUE LVARCHAR(750)
<代码>750字节长于允许的最大长度
380


你无法“修复”这个问题本身;要么减小列大小,要么不将其包含在索引中。

我认为11.50支持较大的页面大小,并且要在列上创建一个LVARCHAR(750)(加上一个4字节整数)的索引,需要为保存索引的dbspace使用较大的页面大小。顺便说一句,我认为页面大小至少需要4kib,而不是您几乎肯定使用的默认2kib。我记得的经验法则是“每页至少5个索引键”,在754字节加上一些开销的情况下,5个键以略低于4kib的速度插入

这与his中引用的值不同

有关Informix 12.10的文档,请参阅

最后一个参考有一个dbspace页面大小和允许的最大键大小表:

Page Size       Maximum Index Key Size
 2 kilobytes      387 bytes
 4 kilobytes      796 bytes
 8 kilobytes    1,615 bytes
12 kilobytes    2,435 bytes
16 kilobytes    3,245 bytes
如果11.50不支持较大的页面大小,如果必须创建这样的索引,则必须迁移到较新的版本(建议使用12.10,也可以使用11.70)


另一个可能考虑的是你是否真的想要这么大的密钥串;你能把它减少到,比如说,350字节吗?这将适合您当前的系统。

这是我正在使用的版本的问题,还是在所有informix版本和版本中都会发生这种情况?其他版本是否使用了不同的限制?@ChamilaWijayarathna您可以自己检查文档,但我希望它在不同版本之间保持不变。