修改状态索引

修改状态索引是系统生成的索引,用于在 按列组织的 表上实现当前已落实的索引扫描语义。

由于对 按列组织的 表执行了下列其中一项操作,因此创建了修改状态索引:
  • 索引是通过使用 CREATE INDEX 语句显式创建的。
  • 尝试创建已存在的索引。 在此情况下,将返回警告消息 SQL0605W,但会创建修改状态索引。
  • 将创建主键或唯一键,并且 DB2_EXTEND_COL_UNIQUE_INDEX_ACCESS 注册表变量设置为“ON”。

当对 按列组织的 表运行第一个 CREATE INDEX 语句时,将创建修改状态索引。

缺省情况下,创建唯一键或主键约束时,不会创建修改状态索引。 如果注册表变量 DB2_EXTEND_COL_UNIQUE_INDEX_ACCESS 设置为“ON”,那么当您创建强制主键或唯一约束时,将生成修改状态索引。

您可以增加使用现有索引的索引存取方案数。 为此,请通过发出带有与主索引或唯一索引匹配的定义的 CREATE INDEX 语句,创建修改状态索引。 此过程的示例在 使用方案中提供。 请参阅 按列组织的表的说明信息 ,以获取有关可能的新类型索引存取方案的详细信息。

使用方案

在此使用方案中,当您尝试创建与已存在的主键或唯一约束的索引匹配的索引时,将生成修改状态索引。 请遵循此过程,以使现有索引可供更多 SQL 语句类型使用。
  1. 获取索引的名称,并验证类型为 MDST 的索引是否不存在。
    db2 "select substr(indname,1,25) indname, indextype from syscat.indexes
         where tabschema='TEST1' and tabname = 'T1' and indextype in ('REG','MDST')"
    此查询将返回以下输出:
    INDNAME                   INDEXTYPE
    ------------------------- ---------
    SQL171120105642950        REG
  2. 获取索引中的列名。
    db2 "select substr(indname,1,35) indname, substr(colname, 1, 10) colname, COLSEQ, COLORDER
         from syscat.indexcoluse where indname = 'SQL171120105642950'"
    
    此查询将返回以下输出:
    INDNAME                             COLNAME    COLSEQ COLORDER
    ----------------------------------- ---------- ------ --------
    SQL171120105642950                  COL2            1 A
    SQL171120105642950                  COL1            2 A
    
  3. 创建使用与主键或唯一约束相同的列的索引。
    db2 "create index I1 on TEST1.T1 (col2,col1)"
    
    SQL0605W  The index was not created because an index
    "SYSIBM.SQL171120105642950" with a matching definition already exists.
    SQLSTATE=01550
  4. 验证是否已创建修改状态索引但未创建任何常规索引。
    db2 "select substr(indname,1,25) indname, indextype from syscat.indexes
         where tabschema='TEST1' and tabname = 'T1' and indextype in ('REG','MDST')"
    
    此查询将返回以下输出:
    INDNAME                   INDEXTYPE
    ------------------------- ---------
    SQL171120105642950        REG
    SQL171120105649725388     MDST