唯一索引和包含语句

时间:2009-05-25 12:47:06

标签: sql db2

创建唯一索引

在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;等等......)?

1 个答案:

答案 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是当前的版本)。