注意:Oracle 11gR2 标准版(所以没有分区)
所以我必须建立一个流程,从包含大约 2700 万条记录的表中构建报告。我面临的困境是我无法从该表中创建自己的索引,因为它是我们无法更改的第 3 方表。因此,我开始尝试使用物化视图,然后我可以在其中创建自己的索引,或者创建一个基本上只是我会根据需要截断并重新填充的副本的物理表。
MAT 视图的优点是它基本上是从“实时”表中提取的,所以我不必担心差异,只要我在使用前刷新它,问题是刷新似乎需要大量时间. 然后我决定尝试物理表方法,我尝试截断和重新填充(大约需要 10 分钟),然后重建索引(需要另外 10 个,给予或接受)....我还尝试只使用“新”记录进行更新通过执行:
INSERT... SELECT where NOT Exists (Select 1 from Table where PK = PK)
无论我的索引、并行度等如何,这几乎都需要 10 分钟...
有没有人不得不处理如此大量的数据(这将继续增长)并找到一种性能良好且有效的方法?
似乎视图不行......所以我只剩下这两个选项,因为我无法调整我的主表上的索引,所以任何提示建议将不胜感激......这个过程的整个目的是为了让报告“更快”,但不知何故,我在某些领域获得了性能,但考虑到我需要移动的数据量,我最终会在其他领域失去。除了以下是否还有其他选择:
- 截断/填充表,重建索引
- 从不存在 PK 的主表填充辅助表
- 物化视图(刷新、重建索引)
- 从 Live 表中提取的视图(无新索引)
在此先感谢您的任何建议.....
有谁知道如果我在第二个选项上进行插入时呈现我的索引并且这样不可用,或者它是否应该非常相似,那么执行“将表创建为选择...”是否比“插入...选择”表现更好?