在DB2 UDB中,我可以使用以下语法
创建索引create unique index I_0004 on TABLENAME (a) INCLUDE (b, c, d);
其中a,b,c和d是表TABLENAME
的字段。
在DB2 for os390中,不允许使用此语法(INCLUDE
关键字),因此我按如下方式创建索引
create unique index I_0004 on TABLENAME (a);
create index I_0005 on TABLENAME (a, b, c, d);
上述两个陈述是否等同于INCLUDE
关键字的解决方案?
并且,如果我稍微修改第一个语句
create index I_0005 on TABLENAME (a, b, c, d) ALLOW REVERSE SCANS;
这个ALLOW REVERSE SCANS
相当于创建索引
create index I_0005 on TABLENAME (a, b, c, d);
create index I_0005 on TABLENAME (d, c, b, a);
还是考虑给定列的任何组合(我的意思是,a,b,c,d; b,c,d,a; c,d,a,b;等等......)?
答案 0 :(得分:1)
关于UNIQUE INDEX
:粗略地说,是的,(a)
上包含(b, c, d)
的唯一索引等同于(a)
上的唯一索引加上(a, b, c, d)
上的一个非唯一的 - 除了当然,在内部,数据库引擎可以使用更少的空间& c。
关于ALLOW REVERSE SCANS
:否,(a, b)
上可以反向扫描的索引不等同于(b, a)
上不能加1的索引 - 相反,可以反向扫描的索引相当于在ASC
成为DESC
的相同列上不能再加上另一个索引,反之亦然(而ASC
是未指定时的默认值。
请注意,由于默认情况下允许DB2 9.1反向扫描,请参阅http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.rn.doc/doc/c0023548.htm(我相信DB2 V8现在已不再支持,请参阅http://www-01.ibm.com/support/docview.wss?rs=71&uid=swg21370360 - 我认为V9.5是当前的版本)。