oracle存储过程求优化到1s以下

隐官城头坐 2015-01-12 10:09:48
需要优化的PL/SQL如下,要求
--Step1创建表
CREATE TABLE TRAIN_01_TEST(TNUM NUMBER);
--Step2.创建优化前存储过程
CREATE OR REPLACE PROCEDURE P_01_TEST
AS
BEGIN
FOR i IN 1..100000 LOOP
EXECUTE IMMEDIATE 'insert into train_01_test values('||i||')';
COMMIT;
END LOOP;
END;
...全文
762 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenlele088 2015-03-27
  • 打赏
  • 举报
回复
1、这个算硬解析,应该不用动态sql 2、多条一起提交性能要远大于单条提交 3、批量整体插入性能要远大于单条插入 4、排序后的批量插入更快 5、你这个应该是自己转换后的简单需求,若真是只是实现一个序列有很多更好办法 6、转换后的需求未必和真正需求一致
bw555 2015-01-13
  • 打赏
  • 举报
回复
引用 5 楼 a1969212650 的回复:
多谢多谢,提交之后,数据10w条是乱序的,应该怎么解决呢
乱序没法处理的,这是oracle本身的机制,只能查询的时候增加order来处理
隐官城头坐 2015-01-12
  • 打赏
  • 举报
回复
引用 1 楼 bw555 的回复:
使用下面的方式进行插入,你原来循环一条一条插入肯定会很慢的
insert into train_01_test
select rownum
from dual
connect by rownum<=100000
多谢多谢
美到心痛 2015-01-12
  • 打赏
  • 举报
回复
引用 5 楼 a1969212650 的回复:
[quote=引用 4 楼 sjcss 的回复:] [quote=引用 1 楼 bw555 的回复:] 使用下面的方式进行插入,你原来循环一条一条插入肯定会很慢的
insert into train_01_test
select rownum
from dual
connect by rownum<=100000
再加个append hint,减少日志量,会更好一点点
insert /*+append*/ into train_01_test
select rownum
from dual
connect by rownum<=100000
[/quote] 多谢多谢,提交之后,数据10w条是乱序的,应该怎么解决呢[/quote] 表里的数据乱序,对你不重要吧~你要的是插入的速度。查询的时候加order by 就ok了
隐官城头坐 2015-01-12
  • 打赏
  • 举报
回复
引用 4 楼 sjcss 的回复:
[quote=引用 1 楼 bw555 的回复:] 使用下面的方式进行插入,你原来循环一条一条插入肯定会很慢的
insert into train_01_test
select rownum
from dual
connect by rownum<=100000
再加个append hint,减少日志量,会更好一点点
insert /*+append*/ into train_01_test
select rownum
from dual
connect by rownum<=100000
[/quote] 多谢多谢,提交之后,数据10w条是乱序的,应该怎么解决呢
bw555 2015-01-12
  • 打赏
  • 举报
回复
单机测试3秒,在服务器跑应该1秒能搞定吧
SQL> CREATE TABLE TRAIN_01_TEST(TNUM NUMBER);

表已创建。

SQL> set timing on
SQL> insert into train_01_test
  2  select rownum
  3  from dual
  4  connect by rownum<=100000;

已创建100000行。

已用时间:  00: 00: 03.09
SQL> commit;

提交完成。

已用时间:  00: 00: 00.04
bw555 2015-01-12
  • 打赏
  • 举报
回复
使用下面的方式进行插入,你原来循环一条一条插入肯定会很慢的
insert into train_01_test
select rownum
from dual
connect by rownum<=100000
美到心痛 2015-01-12
  • 打赏
  • 举报
回复
引用 1 楼 bw555 的回复:
使用下面的方式进行插入,你原来循环一条一条插入肯定会很慢的
insert into train_01_test
select rownum
from dual
connect by rownum<=100000
再加个append hint,减少日志量,会更好一点点
insert /*+append*/ into train_01_test
select rownum
from dual
connect by rownum<=100000

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧