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

The total size of the index is too large or too many parts in index in informix

我正在尝试 运行 遵循 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: The total size of the index is too large or too many parts in index.

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

出现此错误的原因是什么,我该如何解决?

来自informix documentation

You can include up to 16 columns in a composite index. The total width of all indexed columns in a single composite index cannot exceed 380 bytes.

您要添加到索引的列之一是 REG_PATH_VALUE LVARCHAR(750)750 字节长于 380 允许的最大值。

你不能"fix"这个本身;缩小列大小,或者不将其包含在索引中。

我相信 11.50 支持大页面大小,要在 LVARCHAR(750)(加上一个 4 字节 INTEGER)列上创建索引,您需要为 dbspace 使用更大的页面大小持有索引。顺便说一下,我认为页面大小至少需要 4 KiB,而不是您几乎肯定正在使用的默认 2 KiB。我记得的经验法则是 'at least 5 index keys per page',在 754 字节加上一些开销的情况下,5 个键的大小不到 4 KiB。

这与Bohemian in his 引用的值不同。

有关 Informix 12.10 的文档,请参阅 IDS 12.10 Information Center

最后一个参考具有 table 的数据库空间页面大小和允许的最大键大小:

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 字节吗?那将适合您当前的系统。