表没有可充当所生成索引的分段的列索引时,数据库服务器估计构建列的索引分段的成本,将此成本与重新构建生成表的所有分段的整个索引相比,而选择成本较少的索引构建。
CREATE TABLE tb1(a int, b int) FRAGMENT BY EXPRESSION (a >=0 AND a < 5) IN db1, (a >=5 AND a <10) IN db2; CREATE INDEX idx1 ON tb1(a);
CREATE TABLE tb2 (a int, b int, CHECK (a >=10 and a<15)) IN db3; CREATE INDEX idx2 ON tb2(a) IN db3; CREATE TABLE tb3 (a int, b int, CHECK (a >= 15 and a<20)) IN db4; CREATE INDEX idx3 ON tb3(b) IN db4; ALTER FRAGMENT ON TABLE tb1 ATTACH tb2 AS (a >= 10 and a<15) tb3 AS (a >= 15 and a<20);
三个 CREATE INDEX 语句自动计算 HIGH 方式中每个索引的主列的分布统计信息,以及 LOW 方式的索引统计信息和表统计信息。
CREATE TABLE tb1(col1 int, col2 int); CREATE INDEX index idx1 on tb1(col1); (equivalent to update stats low on table tb1) LOAD from tb1.unl insert into tb1; (load some data) CREATE INDEX idx2 on tb1(col2);
由于 CREATE INDEX 语句不更新名称为 idx1 的预先存在索引的索引级别统计信息,因而语句 CREATE INDEX idx2 on tb1(col2) 不完全等同于 UPDATE STATISTICS LOW FOR TABLE tb1。
在上述示例中,表 tb3 没有 对列 a 的索引,该索引 可以作为所生成索引 idx1 的分段。 数据库服务器估计对已用完的表 tb3 的列 a 建立索引分段的成本,并将此成本与为合成表上的所有分段重建整个索引的成本相比较。 数据库服务器会选择成本较小的索引建立。