测试说明:
创建一张表,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,发现根本不识别这种特殊的写法。辛苦了一个晚上,算是有所收获吧!自己安慰一下!