再使用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');
后面使用事务,只用了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