为什么在更改列大小之前应删除功能索引

时间:2015-05-21 06:46:44

标签: sql oracle

为什么在更改列大小之前应删除功能索引。

1 个答案:

答案 0 :(得分:1)

嗯,这个问题很长一段时间困扰着我的好奇心。虽然我发现了一个dba.stackexchange问题直接回答了这个问题,但为什么'部分问题需要更多解释。

基于oracle's documentation,以下是要求删除基于函数的索引的要点:

  1. 基于函数的索引计算涉及一列或多列的表达式的值,并将其存储在索引中。
  2. Oracle数据库将索引表达式表示为虚拟列,ANALYZE语句可以在其上构建直方图。
  3. 基于函数的索引预先计算并存储表达式的值。
  4. 以上几点强调,从函数本身计算的值被存储(作为虚拟列)。因此,实际表列上的任何DDL(基于函数的索引)都需要virtual expression上的重建(DML),这是不允许的。