为了提高性能,我希望将来自同一列的几个字段组合成持久性派生列。
我已经探索过自动化和虚拟专栏,但没有给出正确的解决方案。发现Oracle虚拟列类似于具有一些附加功能的一般视图中字段组合/计算的派生列,它在查询执行过程中执行虚拟列表达式。
除了一般视图之外,还有使用物化视图的选项,这将创建单独的物化视图段和单独的执行开销。
我正在设法维护只读虚拟列,当提交发生时,该列将在插入/更新字段时自动计算。在Oracle11gR2中,有人能帮助这个解决方案吗?
-例如:
create table table1(id int, field1 varchar2(30),field2 varchar2(30),field3 varchar2(30),field4 varchar2(30),field5 varchar2(200));
update table1 set field5=field1 || '#' || field2 || '#' || field3 || '#' || field4;
commit;
在上面的示例中,当我们执行#1、#2和#4时,我希望在内部自动填充field5,而不增加主要的执行时间。
发布于 2015-10-06 07:11:21
我们可以使用下面的查询来解决上述问题
create table table1
(id int,
field1 varchar2(30),
field2 varchar2(30),
field3 varchar2(30),
field4 varchar2(30),
field5 varchar2(200) GENERATED ALWAYS AS (field1 || '#' || field2 || '#' || field3 || '#' || field4));
发布于 2015-10-06 07:30:48
请仔细检查为什么需要额外的列。
我可以推测,这是使用如下谓词优化访问
WHERE field5 like '%#<search key>#%'
避免使用大量或的复杂谓词
如果这是原因,您可能会从附加连接列的附加表中获益。
create table HLPR
(id number, /* FK to your table */
field_no NUMBER,
field_value varchar2(30));
与上面的谓词相同,您现在可以用
WHERE field_value = '<search key>'
也就是说,您可以通过全表扫描或索引访问来获得性能查询。
对不起,如果我的猜测走错了方向,只有我的0.02c
https://stackoverflow.com/questions/27419515
复制相似问题