使用双表通过直接插入读取序列的 nextval 时是否会影响性能?
我目前正在优化大型 IT 系统中的性能,我发现几乎所有的 sequence.nextval 都是通过以下方式读取的:
SELECT SOME_SQ.NEXTVAL INTO someID FROM DUAL;
insert into .... (someId)
Run Code Online (Sandbox Code Playgroud)
我想知道在标准上使用上述方式时性能是否会受到影响:
insert into .... (some_sq.nexval, ...)
Run Code Online (Sandbox Code Playgroud)
谢谢
请注意,11g支持直接在 PL/SQL 中的序列表达式
否则,来自Oracle Docs:
从 Oracle 数据库 10g 第 1 版开始,在计算不包含 DUMMY 列的表达式时,不会对 DUAL 表执行逻辑 I/O。此优化在执行计划中列为 FAST DUAL。
因此,任何性能提升都将是微不足道的。在以下测试中,我删除并重新创建了每次执行之间的表和序列:
试验台:
create sequence s;
create table t(id integer);
Run Code Online (Sandbox Code Playgroud)
测试:
declare
n integer;
begin
for i in 1..100000 loop
select s.nextval into n from dual;
insert into t(id) values(n);
end loop;
end;
/
--average about 5s
declare
n integer;
begin
for i in 1..100000 loop
insert into t(id) values(s.nextval) returning id into n;
end loop;
end;
/
--average about 4s
begin
for i in 1..100000 loop
insert into t(id) values(s.nextval);
end loop;
end;
/
--average about 3s
Run Code Online (Sandbox Code Playgroud)
您可能应该在您自己的环境中重新运行这些测试或类似的测试。
归档时间: |
|
查看次数: |
1100 次 |
最近记录: |