【发布时间】:2014-12-11 09:36:06
【问题描述】:
为了提高性能,我希望通过组合同一列中的几个字段来制作持久性派生列。
我已经探索了自动化和虚拟列,但没有给我合适的解决方案。 发现Oracle虚拟列类似于派生列,在一般视图中具有字段的组合/计算,并具有一些附加功能,它在查询执行期间执行虚拟列表达式。
除了一般视图,还有使用物化视图的选项,这将创建单独的物化视图段和单独的执行开销。
我试图找出维护只读虚拟列,当提交发生时,它将在插入/更新字段时自动计算。任何人都可以在 Oracle 11gR2 中为这个解决方案提供帮助吗?
--例子:
create table table1(id int, field1 varchar2(30),field2 varchar2(30),field3 varchar2(30),field4 varchar2(30),field5 varchar2(200));- ....直接路径加载将通过 ETL 过程发生在 id、field1、field2、field3 和 field4 中...
update table1 set field5=field1 || '#' || field2 || '#' || field3 || '#' || field4;commit;
在上面的示例中,我希望在执行 #1、#2 和 #4 后在内部自动填充 field5,而不增加主要执行时间。
【问题讨论】:
-
对于这么简单的表达式,我看不出实际存储这个值有什么好处。只需使用虚拟/计算列就可以了。
-
您是否实际测试过性能影响?它认为你不会注意到它。
-
当您在第 2 步中填充了大量数据时,上述更新语句需要更长的时间。我只是希望避免在这里执行更新。
-
再次:为什么您认为您需要一个 persisted 列?如果您只是创建一个常规计算列,您 确实 避免执行更新。使用计算列检索时是否遇到性能问题?
-
原因: 1、以下SQL脚本需要引用拼接字段。 2. 避免更新执行 3. 绕过日志记录
标签: sql oracle oracle11gr2