sqlite&mysql-快速批量导入数据方法记录

上一篇 / 下一篇  2013-10-30 16:32:41 / 个人分类:sqlite

sqlite批量导入,先把要插入的数据放到一个.sql文件中
再使用sqlite3 sqlite数据库 < .sql文件
例:
sqlite3 test.db < /tmp/a.sql

cat /tmp/a.sql
insert into friend(contactid,friendid,groupingsid,domain,update_time) values(544764,545806,0,'239test.net','1383110019');
insert into friend(contactid,friendid,groupingsid,domain,update_time) values(544764,545807,0,'239test.net','1383110019');
insert into friend(contactid,friendid,groupingsid,domain,update_time) values(544764,545808,0,'239test.net','1383110019');
insert into friend(contactid,friendid,groupingsid,domain,update_time) values(544764,545809,0,'239test.net','1383110019');


但以上方法在遇到大数据量时,需要花费较多时间
今天导10万条记录,用了30分钟左右,悲剧!!

后面使用事务,只用了2-3秒。。。
天差地别!!

事务使用方法:
在.sql文件第一行前,增加:
BEGIN TRANSACTION;
最后一行后,增加:
COMMIT;

即:
cat /tmp/a.sql
BEGIN TRANSACTION;
insert into friend(contactid,friendid,groupingsid,domain,update_time) values(544764,545806,0,'239test.net','1383110019');
insert into friend(contactid,friendid,groupingsid,domain,update_time) values(544764,545807,0,'239test.net','1383110019');
insert into friend(contactid,friendid,groupingsid,domain,update_time) values(544764,545808,0,'239test.net','1383110019');
insert into friend(contactid,friendid,groupingsid,domain,update_time) values(544764,545809,0,'239test.net','1383110019');
COMMIT;

##########################################################

mysql下使用事务,和直接insert速度是一样的
而且mysql下事务使用
BEGIN TRANSACTION;
要修改为:
BEGIN;
或者:

START TRANSACTION;


试验1K条记录,insert方式、增加事务方式,都是20秒左右
使用load data infile方式,只要0.137秒
# time mysql -e "load data infile '/tmp/2.sql' into table db.table fields terminated by ',';"   

real    0m0.137s
user    0m0.005s
sys     0m0.001s

5W条记录,只使用了5秒多,原使用insert方式,要十来分钟

1千万条记录,脚本连批带导使用了:33分钟33秒,远比insert来的快

for ((i=1;i<=200;i=i++))
do

        for ((j=1;j<=50000;j++))
        do
                echo "$i,1,$j,3,0,0,128,32,0,1428564813,800,q,q,1428660941,test2015,0" >> /usr/local/testsql/$i.sql
        done
        mysql -e "load data infile '/usr/local/testsql/$i.sql' into table db.table fields terminated by ',';"
done


TAG: 数据 MySQL 批量 导入 方法 记录 sqlite mysql 快速

 

评分:0

我来说两句

Open Toolbar