疑问解决,view是会变成invalid。但是如果你执行一遍select * from view 那么view就会被重新编译。
我在第一次测试的时候就是先执行了一遍select*from view 所以没有看出来view是不是invalid。第二次测试时在删除index后直接查看view的状态发现果然是invalid。
有一点要注意的就是,这里的view必须是基于index的,否则删除index对view没有影响。
--------------------------------
在oracle concept, 第六章 schema object 间的依赖关系,6.2.1.3部分有这么一段话
Some data warehouses drop indexes on tables at night to facilitate
faster loads. However, all views dependent on the table whose index is
dropped get invalidated. This means that subsequently running any
package that reference these dropped views will invalidate the package.
翻译过来的意思就是,在数据仓库中,有时会把表的索引删除以加快数据载入速度。然而依赖于这些表的视图会变成无效,接着就会导致依赖于这些视图的包变为无效状态。
可是经过测试。
测试过程如下
创建一个表 fbt
创建索引 ind1
创建视图 v1
通过查询执行计划发现v1是基于ind1创建的。现在我们把ind1删除,可是发现对v1没有影响,只是执行计划中的扫描方式由索引扫描变成了全表扫描。 难道说数据仓库和数据库有什么不同么?
阅读(630) | 评论(0) | 转发(0) |