注意:Oracle 11gR2的标准版本(所以没有分区)Oracle实体化视图VS物理表
所以我必须建立一个工艺打造过含有约27万条记录的表报告。我面临的困境是,我无法在这张桌子上创建自己的索引,因为它是我们无法改变的第三方桌子。于是,我开始尝试使用Materialized视图,然后我可以创建自己的索引,或者物理表,这些表基本上只是根据需要截断和重新填充的重复项。
MAT视图的优势在于它基本上是从“Live”表中拉出来的,所以我不必担心差异,只要在使用前刷新它即可,问题在于刷新似乎需要大量的时间。然后,我决定尝试物理表方法,在那里我尝试截断和重新填充(大约10分钟),然后重建索引(这需要另外10次,给予或采取)....我也尝试更新只有“新”记录通过执行:
INSERT... SELECT where NOT Exists (Select 1 from Table where PK = PK)
几乎需要10分钟也不管我的索引,排比等...
有没有人有处理这种数据量(这将继续增长),并发现一种性能良好且工作效率高的方法?
似乎一个视图不会这样做......所以我留下了这2个选项,因为我无法调整我的主表上的索引,所以任何提示建议将不胜感激......整个目的这个过程的目的是让事情“更快”地进行报告,但是不知何故我在某些领域获得了表现,鉴于我需要移动的数据量,我最终在别人中失败。是否有其他的选择除了:
- 截断/填充表,重建索引
- 填充从主表次级表,其中PK不存在
- 物化视图(刷新,重建索引)
- 视图,拉从直播表(没有新的索引)
在此先感谢您的任何建议.....
有没有人知道如果在第二个选项上执行插入操作时,如果执行“插入...选择”操作时执行“创建表格选择...”效果会比“插入...选择”效果更好,或者应该非常类似?
您可以量化“大量时间”来刷新物化视图而不是使用物理表吗?你如何刷新物化视图?你正在做一个事务刷新(删除和插入)?或者你正在做一个截断和直接路径插入?你能在基表上创建一个物化视图日志,这样你就可以对物化视图进行增量刷新了吗? – 2012-07-18 13:14:22
@JustinCave - 感谢您的回应!一般来说,刷新也需要花费10分钟以上,我简单地使用了以下内容:“DBMS_MVIEW.REFRESH(LIST =>'ASSUMPTION.GL_JLOG_UNBALANCED',PARALLELISM => 4);”...我对Oracle很新,所以如果有其他方法,请告诉我。实际上,在插入物理表之前禁用了日志记录(NOLOGGING),并使用了APPEND和并行提示,这些都有所帮助。在我的主表上启用日志记录是的,所以我怎么能像你建议的那样进行增量刷新?你能提供一个例子吗? – denisb 2012-07-18 14:00:27
我不相信你无法制作索引。可以使索引与表中的不同模式。 – 2012-07-18 14:17:01