【问题标题】:The total size of the index is too large or too many parts in index in informix在informix中索引的总大小太大或索引中的部分太多
【发布时间】:2015-07-09 06:15:56
【问题描述】:

我正在尝试在 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。

这个错误的原因是什么,我该如何解决?

【问题讨论】:

    标签: database indexing informix ddl


    【解决方案1】:

    我相信 11.50 支持大页面大小,并且要在 LVARCHAR(750) 列(加上 4 字节整数)上创建索引,您需要为保存的 dbspace 使用更大的页面大小索引。顺便说一下,我认为页面大小至少需要 4 KiB,而不是您几乎可以肯定使用的默认 2 KiB。我记得的经验法则是“每页至少有 5 个索引键”,在 754 字节加上一些开销时,5 个键在 4 KiB 以下就吱吱作响。

    这与Bohemian在他的answer中引用的值不同。

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

    最后一个参考有一个 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 字节吗?这将适合您当前的系统。

    【讨论】:

      【解决方案2】:

      来自informix documentation

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

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

      你不能“解决”这个问题;要么缩小列大小,要么不将其包含在索引中。

      【讨论】:

      • 这是我正在使用的版本问题,还是在所有informix 版本和版本中都会出现这种情况?其他版本是否使用不同的限制?
      • @ChamilaWijayarathna 您可以自己查看文档,但我希望它会在各个版本中保持不变。
      猜你喜欢
      • 1970-01-01
      • 2022-11-20
      • 2016-01-06
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      相关资源
      最近更新 更多