gpt4 book ai didi

database - Oracle 物化 View VS 物理表

转载 作者:太空狗 更新时间:2023-10-30 01:57:53 25 4
gpt4 key购买 nike

注意:Oracle 11gR2 标准版(所以没有分区)

所以我必须构建一个流程来根据包含大约 2700 万条记录的表构建报告。我面临的困境是我无法从此表创建自己的索引,因为它是我们无法更改的第 3 方表。因此,我开始尝试使用物化 View ,然后我可以在其中创建自己的索引,或者创建一个基本上只是复制品的物理表,我会根据需要截断和重新填充。

MAT View 的优点是它基本上是从“实时”表中提取的,因此只要在使用前刷新它,我就不必担心差异,问题是刷新似乎需要很长时间多少时间。然后我决定尝试物理表方法,我尝试截断和重新填充(大约 10 分钟),然后重建索引(这又需要 10,给或拿)....我也尝试只更新"new"记录通过执行:

INSERT... SELECT where NOT Exists (Select 1 from Table where PK = PK) 

无论我的索引、并行度等如何,这几乎需要 10 分钟......

有没有人必须处理如此大量的数据(这些数据会不断增长)并找到一种性能良好且工作高效的方法?

似乎 View 不会做....所以我只剩下这两个选项,因为我无法调整我的主表上的索引,所以任何提示建议将不胜感激...的全部目的这个过程是为了让报告“更快”,但不知何故,我在某些领域获得了性能,但考虑到我需要移动的数据量,我最终在其他领域失去了。除了以下之外还有其他选择吗:

  1. 截断/填充表,重建索引
  2. 从不存在 PK 的主表填充辅助表
  3. 物化 View (刷新、重建索引)
  4. 从实时表中提取的 View (无新索引)

提前感谢您的任何建议......

有谁知道如果我在第二个选项上执行插入时呈现我的索引等不可用,那么执行“Create Table As Select...”是否比“Insert...Select”执行得更好,或者它应该是公平的相似?

最佳答案

我认为对于此类任务的非常简单的方法有很多值得一提的地方。考虑在不禁用/重建索引的情况下在重复表上进行截断和直接路径(追加)插入,并在表上设置 NOLOGGING。直接路径插入有一个与之关联的索引维护机制,它可能比在加载后运行多个索引重建更有效,因为它在临时段中记录构建索引所需的数据,从而避免随后的多次全表扫描。

如果您确实想尝试索引禁用/重建,那么尝试在没有查询并行性的情况下同时重建所有索引,因为将只使用一次物理完整扫描——其余扫描将是“寄生的”他们将从内存中读取表 block 。

当您加载重复表时,请考虑对选择中的行进行排序,以便报告中常用的谓词能够访问更少的 block 。例如,如果您通常查询日期范围,则按日期列排序。请记住,构建此报表所花费的额外时间可以通过减少报表查询执行时间来恢复。

也可以考虑压缩表格,但前提是您使用直接路径插入加载,除非您有昂贵的 Advanced Compression 选项。索引压缩和位图索引也值得考虑。

另外,考虑不分析报表。报告查询通常使用多个谓词,而这些谓词使用传统统计数据无法很好地估计,而且您无论如何都必须依靠动态抽样来进行良好的基数估计。

关于database - Oracle 物化 View VS 物理表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11541368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com