在Oracle中启用版本控制(Oracle调用工作区管理的一部分)的命令(DBMS_WM.EnableVersioning)会创建无法编制索引的非物化视图。这会破坏性能,还是在查询视图时会使用_AUX,_LT和_LCK表的索引?
在启用版本控制时,除索引之外是否还存在重大性能问题?
我正在使用Oracle 11g。
答案 0 :(得分:4)
与大多数事情一样,这取决于。
如果您有现有的查询将执行表扫描,则表每晚重建一次,并且您计划永久保留历史数据,您可能会遇到重大性能问题。如果所有查询都使用索引来访问数据,则行不经常更改,并且您只想保留几个版本的历史记录,基础表上的索引就足够了。
我们使用Workspace Manager永远保持相对缓慢变化的表的历史记录以及相对快速更改的表一个月。我们已经使用它在几个应用程序中跨表维护离散保存点,以便用户可以在有趣的时间点永久保存应用程序数据的状态。一般来说,我们对性能表示满意,但是当优化器混淆时,复杂的查询偶尔会进入杂草。
由于您使用的是11g,因此您也可以考虑使用Total Recall。它是企业许可证之上的一个额外成本选项,但它提供了一种更有效的架构,用于跟踪数据随时间的变化,假设您打算在固定的时间段内存储所有更改。另一方面,您可以在不会导致丢弃历史记录的情况下对DDL进行更多限制,这在我所使用的应用程序中往往是一个相当严重的约束。