修改状态索引
修改状态索引是系统生成的索引,用于在 按列组织的 表上实现当前已落实的索引扫描语义。
由于对 按列组织的 表执行了下列其中一项操作,因此创建了修改状态索引:
- 索引是通过使用 CREATE INDEX 语句显式创建的。
- 尝试创建已存在的索引。 在此情况下,将返回警告消息 SQL0605W,但会创建修改状态索引。
- 将创建主键或唯一键,并且 DB2_EXTEND_COL_UNIQUE_INDEX_ACCESS 注册表变量设置为“ON”。
当对 按列组织的 表运行第一个 CREATE INDEX 语句时,将创建修改状态索引。
缺省情况下,创建唯一键或主键约束时,不会创建修改状态索引。 如果注册表变量 DB2_EXTEND_COL_UNIQUE_INDEX_ACCESS 设置为“ON”,那么当您创建强制主键或唯一约束时,将生成修改状态索引。
您可以增加使用现有索引的索引存取方案数。 为此,请通过发出带有与主索引或唯一索引匹配的定义的 CREATE INDEX 语句,创建修改状态索引。 此过程的示例在 使用方案中提供。 请参阅 按列组织的表的说明信息 ,以获取有关可能的新类型索引存取方案的详细信息。
使用方案
在此使用方案中,当您尝试创建与已存在的主键或唯一约束的索引匹配的索引时,将生成修改状态索引。 请遵循此过程,以使现有索引可供更多 SQL 语句类型使用。
- 获取索引的名称,并验证类型为 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 - 获取索引中的列名。
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 - 创建使用与主键或唯一约束相同的列的索引。
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 - 验证是否已创建修改状态索引但未创建任何常规索引。
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