Oracle如何快速、大量的插入数据

测试说明:

创建一张表,5个字段,均是varchar(20)

sql 中脚本格式均是INSERT INTO 表名称 VALUES (值1, 值2,....)

sqlldr为oracle官方提供的导入工具,大家可自己搜索得知。

执行sql脚本的工具用的是Oracle的SQLDeveloper。

/////////////////////////////////////////////first time: 空表
noIndex:
@/Users/Johson/Desktop/insertno.sql; 112s

useIndex:
@/Users/Johson/Desktop/insertuse.sql; 109s

sqlldr:
to TABLENOINDEX 2s
to TABLEUSEINDEX 2.8s

/////////////////////////////////////////////second time:9w的数据量
noIndex:
@/Users/Johson/Desktop/insertno.sql; 104s

useIndex:
@/Users/Johson/Desktop/insertuse.sql; 106s

sqlldr:
to TABLENOINDEX 2s
to TABLEUSEINDEX 2.8s

/////////////////////////////////////////////third time:150w的数据量
noIndex:
@/Users/Johson/Desktop/insertno.sql; 98s

useIndex:
@/Users/Johson/Desktop/insertuse.sql; 102s

sqlldr:
to TABLENOINDEX 2s
to TABLEUSEINDEX 2.8s

/////////////////////////////////////////////fouth time:160w的数据量
noIndex:
@/Users/Johson/Desktop/insertno.sql; 98s

useIndex:
@/Users/Johson/Desktop/insertuse.sql; 102s

sqlldr:
to TABLENOINDEX 2s
to TABLEUSEINDEX 2.8s
插入 1143012 只用了17s

/////////////////////////////////////////////

**总结一下,sqlldr的插入速度远高于我们任何一种单行插入的方式方法。他们远不在一个数量级上,最笨的方式又被无情的甩掉了几条街。


/////////////////////////////////////////////发现我们的劣势很大,研究sqlldr
改写sql脚本格式:
INSERT INTO `Table` (`user_id`, `user_name`) VALUES
(1, 'dsf'),
(2, 'fgy'),
(3, 'faad');


noIndex:
@/Users/Johson/Desktop/insertno.sql; 8s

useIndex:
@/Users/Johson/Desktop/insertuse.sql; 9s

**** 


看到没,速度终于提升上去了,从100s左右缩小到了10s内,目测看其中大概有至少5秒浪费在SQLDeveloper语法检查上,Oracle数据库自身处理速度绝对小与5s,所以sqlldr肯定就是用这个特殊的写法提高数据导入速度。。这个insert写法,发现是不符合SQL标准的,目前得知的只有ORACLE自身支持。数据库连接工具换成其他的如Navicat,发现根本不识别这种特殊的写法。辛苦了一个晚上,算是有所收获吧!自己安慰一下!

阅读更多

没有更多推荐了,返回首页