查看: 30739|回复: 16

【大话IT】oracle 大表数据插入性能问题

[复制链接]
论坛徽章:
2
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52优秀写手
日期:2014-12-12 06:00:15
发表于 2015-3-1 12:42 | 显示全部楼层 |阅读模式
sql 语句:
insert into t_teacher_contract(
ID
,CONTRACT_NUMBER
,HIRING_DEPARTMENT
,START_TIME
,END_TIME
,CONTRACT_STATUS
,FOREIGN_ID
,RECYCLE_FLAG)
select
  sys_guid()
  ,'HT-'||to_char(floor(dbms_random.value(100001,999999)))
,'第'||floor(dbms_random.value(0, 2))||'教学部'
,to_date(floor(DBMS_RANDOM.VALUE(2455229, 2451545)) + trunc(DBMS_RANDOM.VALUE(0, 10)), 'J')
,to_date(floor(DBMS_RANDOM.VALUE(2457055, 2451545)) + trunc(DBMS_RANDOM.VALUE(0, 10)), 'J')
,'已签'
,id
,0
from T_TEACHER_basic_temp;
如上sql 语句,T_TEACHER_basic_temp 表中有数据 15000000(千万级),有没有比较快的方式插入成功啊!!

认证徽章
论坛徽章:
32
懒羊羊
日期:2015-03-25 16:16:10ITPUB14周年纪念章
日期:2015-10-26 17:24:11射手座
日期:2015-09-23 08:53:55喜羊羊
日期:2015-06-15 13:04:17暖羊羊
日期:2015-05-21 16:12:35沸羊羊
日期:2015-05-07 17:25:26暖羊羊
日期:2015-05-21 16:12:35暖羊羊
日期:2015-05-21 16:12:35慢羊羊
日期:2015-04-21 17:07:36慢羊羊
日期:2015-03-25 09:38:59
发表于 2015-3-1 13:56 | 显示全部楼层
可以加个并行..

使用道具 举报

回复
论坛徽章:
2
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52优秀写手
日期:2014-12-12 06:00:15
 楼主| 发表于 2015-3-1 14:02 | 显示全部楼层
iyee_tu 发表于 2015-3-1 13:56
可以加个并行..

怎么加并行,能说的详细点儿吗

使用道具 举报

回复
认证徽章
论坛徽章:
32
懒羊羊
日期:2015-03-25 16:16:10ITPUB14周年纪念章
日期:2015-10-26 17:24:11射手座
日期:2015-09-23 08:53:55喜羊羊
日期:2015-06-15 13:04:17暖羊羊
日期:2015-05-21 16:12:35沸羊羊
日期:2015-05-07 17:25:26暖羊羊
日期:2015-05-21 16:12:35暖羊羊
日期:2015-05-21 16:12:35慢羊羊
日期:2015-04-21 17:07:36慢羊羊
日期:2015-03-25 09:38:59
发表于 2015-3-1 15:08 | 显示全部楼层
select /*+ parallel(T_TEACHER_basic_temp,n)*/
  sys_guid()


n 可以根据你机器性能选择...

使用道具 举报

回复
论坛徽章:
2
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52优秀写手
日期:2014-12-12 06:00:15
 楼主| 发表于 2015-3-1 15:43 | 显示全部楼层
iyee_tu 发表于 2015-3-1 15:08
select /*+ parallel(T_TEACHER_basic_temp,n)*/
  sys_guid()

好的,了解谢谢

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2015-3-1 21:39 | 显示全部楼层
那么多行,别去调用DBMS_RANDOM.VALUE

使用道具 举报

回复
论坛徽章:
2
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52优秀写手
日期:2014-12-12 06:00:15
 楼主| 发表于 2015-3-2 08:39 | 显示全部楼层
〇〇 发表于 2015-3-1 21:39
那么多行,别去调用DBMS_RANDOM.VALUE

我是要造一些测试数据,请问有什么好的方法吗?

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2015-3-2 08:41 | 显示全部楼层
用connect by level的表去关联

使用道具 举报

回复
论坛徽章:
2
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52优秀写手
日期:2014-12-12 06:00:15
 楼主| 发表于 2015-3-2 08:46 | 显示全部楼层
〇〇 发表于 2015-3-2 08:41
用connect by level的表去关联

您好,能说的详细点儿吗?

使用道具 举报

回复
认证徽章
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
发表于 2015-3-2 10:00 | 显示全部楼层
本帖最后由 bfc99 于 2015-3-2 10:02 编辑
dxf82decade 发表于 2015-3-1 15:43
好的,了解谢谢

补充4楼:
1、要开启DML并行功能,否则加了提示也后,也只是对select部分启用并行,而insert还是单进程。开启的方法:
alter session enable parallel dml;
然后在同一个会话中运行你的insert into的语句。

2、加append的提示
综合加并行的提示,最终的提示应类似如下形式其中n小于等于你物理CPU核心的数量)
/*+ append parallel(T_TEACHER_basic_temp,n) */

另外,如果创建的表只是为测试而用或只是临时表,可以试试用create table ... as select 的方法。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表