对表的索引不可用时的情境示例

表的索引不可用时,数据库服务器估计构建索引分段的成本,将此成本与重新构建生成表的所有分段的整个索引相比,而选择成本较少的索引构建。

假设您按照前面的部分创建了表和索引,但第三个表的索引指定了第一个表也使用的数据库空间。 以下 SQL 语句显示了此种应用场合:
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 的成本相比较。 然后,数据库服务器会选择成本较小的索引建立。