P S*_*rma 2 oracle stored-procedures
独立程序和打包程序之间的性能差异是什么?这将是明智的表现,为什么?两者的执行是否有任何区别?
汤姆说:
始终使用包裹.
永远不要使用独立的程序,除了演示,测试和独立的实用程序(什么都不调用,什么都不调用)
在那里你也可以找到关于他们表现的非常好的讨论.只需在该页面上搜索"性能"即可.
如果仍然有严重的疑问,你可以随时测试自己哪一个更快.你肯定会通过这样做来学习新东西.
我对您提出的问题是:虽然在某些情况下调用包过程/函数似乎比调用独立过程/函数更慢,但使用包时可用的附加功能所带来的优势远远超过性能损失.所以,就像汤姆所说,使用包.
链接:http://asktom.oracle.com/pls/asktom/f?p = 100:11:0 ::::P11_QUESTION_ID:7452431376537
测试代码(2000万次调用,runstats_pkg是我根据Tom Kyte的runstats包编写的包):
CREATE OR REPLACE PACKAGE testperf AS
FUNCTION pow(i INT) RETURN INT;
END;
/
CREATE OR REPLACE PACKAGE BODY testperf AS
FUNCTION pow(i int) RETURN INT AS
BEGIN
RETURN i * i;
END;
END;
/
CREATE OR REPLACE FUNCTION powperf(i INT) RETURN INT AS
BEGIN
RETURN i * i;
END;
/
DECLARE
I INT;
S INT DEFAULT 0;
BEGIN
runstats_pkg.start1;
FOR I IN 1 .. 20000000 LOOP
s := s + (powperf(i) / i);
END LOOP;
runstats_pkg.stop1;
dbms_output.put_line(s);
s := 0;
runstats_pkg.start2;
FOR I IN 1 .. 20000000 LOOP
s := s + (testperf.pow(i) / i);
END LOOP;
runstats_pkg.stop2;
dbms_output.put_line(s);
runstats_pkg.show;
END;
Run Code Online (Sandbox Code Playgroud)
结果(Oracle XE):
Run1 latches total versus runs -- difference and pct
Run1 Run2 Diff Pct
2,491 2,439 -52 102.13%
Run1 ran in 2304 hsecs
Run2 ran in 2364 hsecs
run 1 ran in 97.46% of the time
Run Code Online (Sandbox Code Playgroud)
结果(Oracle 11g R1,不同机器):
Run1 latches total versus runs -- difference and pct
Run1 Run2 Diff Pct
2,990 3,056 66 97.84%
Run1 ran in 2071 hsecs
Run2 ran in 2069 hsecs
run 1 ran in 100.1% of the time
Run Code Online (Sandbox Code Playgroud)
所以,你去吧.真的没什么区别.想要更复杂的数据,还需要SQL DML吗?你得自己测试一下.
| 归档时间: |
|
| 查看次数: |
12521 次 |
| 最近记录: |