表的索引不可用时,数据库服务器估计构建索引分段的成本,将此成本与重新构建生成表的所有分段的整个索引相比,而选择成本较少的索引构建。
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(a) IN db2 ;
此示例对数据库空间 db2 中的表 tb3 创建了索引 idx3。 因此,索引 idx3 不可用,因为索引 idx1 在数据库空间 db2 中已经具有一个分段,并且分段存储策略不允许在给定的数据库空间中指定多个分段。
数据库服务器再次估计对已用完的 表 tb3 的列 a 建立索引分段的 成本,并将此成本与为合成表上的所有分段重建整个 索引 idx1 的成本相比较。 然后,数据库服务器会选择成本较小的索引建立。