Oracle11g 在完全刷新(Oracle 11g)之前,是否可以在物化视图中手动删除索引?

Oracle11g 在完全刷新(Oracle 11g)之前,是否可以在物化视图中手动删除索引?,oracle11g,refresh,materialized-views,Oracle11g,Refresh,Materialized Views,我有一个拥有1200万条记录的物化视图。每次完成完全刷新时,原子_刷新设置为false。刷新中未启用日志记录,并且mview是远程表的本地副本。不存在任何联接。mview刷新大约需要一个小时,我想缩短刷新时间 大约有20个索引,我认为由于这是一个完整的非atomin刷新,删除和重建索引需要很长时间。我可以在刷新之前手动删除索引,并在刷新完成后手动生成它们吗?可以吗?当然 这是调整流程最有效的方法吗?可能不会。执行增量刷新而不是完全刷新将允许您仅移动通过数据库链接实际更改的数据,并且可能会显著降低

我有一个拥有1200万条记录的物化视图。每次完成完全刷新时,原子_刷新设置为false。刷新中未启用日志记录,并且mview是远程表的本地副本。不存在任何联接。mview刷新大约需要一个小时,我想缩短刷新时间

大约有20个索引,我认为由于这是一个完整的非atomin刷新,删除和重建索引需要很长时间。我可以在刷新之前手动删除索引,并在刷新完成后手动生成它们吗?

可以吗?当然

这是调整流程最有效的方法吗?可能不会。执行增量刷新而不是完全刷新将允许您仅移动通过数据库链接实际更改的数据,并且可能会显著降低索引维护的成本。另外,如果您正在执行非原子刷新,这意味着Oracle正在后台执行直接路径加载。这意味着索引维护已经被推迟到数据加载到表中之后,这限制了删除和重新创建索引的潜在好处


如果您决定每次手动删除并重新创建索引,则必须确保在添加或删除新索引时保持最新。当一些开发人员只想添加或删除索引时,这是一个相对容易忽略的维护问题。

可以吗?当然您是否有理由相信这实际上会提高性能?如果每次刷新时都要在网络上复制1200万行,那么到目前为止,我认为网络吞吐量将是瓶颈。您是否有理由相信索引维护实际上是瓶颈?你能做一个增量(快速)刷新而不是完全刷新吗?我有其他的MView,在合理的时间内刷新相同数量的数据和更少的索引。这就是为什么我认为索引维护是个问题。我同意增量刷新是一种有效的方法。但是,如果我进行增量刷新,那么在对主表进行更改时会产生日志记录开销。而且日志记录实际上并没有在数据库中的任何地方启用。@anesh-是的,您需要在源表上有一个物化视图日志来跟踪更改。这将在源上的
INSERT
操作上产生一些开销。但它将显著减少每次刷新时从源表读取每个块的开销。