最近在使用到了Oracle的表函数,尤其是实现嵌套表的数据按表结构进行返回,发现PIPELINED方式,确实能让性能有非常高的提升。
Oracle PipeLined:
看了相关的文章,大致是将数据进行按流水线方式进行处理,执行无等待,而不是那种传统的将本次数据全处理完了,再送往下一个处理环节。
最近找了个时间,特意进行了一下测试。
结论:
1 表函数以嵌套表返回时,是非常耗时与耗内存的;
2 PIPELINED方式,能让数据无等待,效率非常高,尤其是应用在Oracle的表函数返回;
不受SQL语句类型的限制,都能有很好的性能提升,尤其是在大数据量的情况下:
1) select * from table(表函数())
2)还是select count(*) from table(表函数()) (本次过程不体现,但是实际应用使用中确实性能较非PIPELINED方式有非常高的性能提升)
3) 还是select * from table(表函数()) where conditions(本次过程不体现,但是应用中确实性能较非PIPELINED方式有非常高的性能提升)
下面来看具体步骤
1 创建两个辅助类型
CREATE OR REPLACE TYPE performance_e_v IS OBJECT
(
pid INTEGER ,
persionid VARCHAR2(40),
datefield DATE,
name VARCHAR2(40),
account VARCHAR2(20),
balance NUMBER,
securitycode VARCHAR2(60)
);
/
create or replace type performance_TABLE as table of performance_e_v;
/