永发信息网

mysql大量数据插入慢的问题

答案:2  悬赏:60  手机版
解决时间 2021-02-03 16:15
我现在有大量的insert into 数据不知道怎么执行起来才不是很慢
最佳答案
这个是需要做一些设置的。主要设置 rewriteBatchedStatements参数。原理如下:

MySQL Jdbc驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,直接造成较低的性能。

只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL (jdbc:mysql://ip:port/db?rewriteBatchedStatements=true)。不过,驱动具体是怎么样批量执行的? 你是不是需要看一下内幕,才敢放心地使用这个选项? 下文会给出答案。

另外,有人说rewriteBatchedStatements只对INSERT有效,有人说它对UPDATe/DELETE也有效。为此我做了一些实验(详见下文),结论是: 这个选项对INSERT/UPDATE/DELETE都有效,只不过对INSERT它为会预先重排一下SQL语句。

注:本文使用的mysql驱动版本是5.1.12

实验记录:未打开rewriteBatchedStatements时

未打开rewriteBatchedStatements时,根据wireshark嗅探出的mysql报文可以看出,
batchDelete(10条记录) => 发送10次delete 请求
batchUpdate(10条记录) => 发送10次update 请求
batchInsert(10条记录) => 发送10次insert 请求

也就是说,batchXXX()的确不起作用

实验记录:打开了rewriteBatchedStatements后

打开rewriteBatchedStatements后,根据wireshark嗅探出的mysql报文可以看出

batchDelete(10条记录) => 发送一次请求,内容为”delete from t where id = 1; delete from t where id = 2; delete from t where id = 3; ….”
batchUpdate(10条记录) => 发送一次请求,内容为”update t set … where id = 1; update t set … where id = 2; update t set … where id = 3 …”
batchInsert(10条记录) => 发送一次请求,内容为”insert into t (…) values (…) , (…), (…)”

对delete和update,驱动所做的事就是把多条sql语句累积起来再一次性发出去;而对于insert,驱动则会把多条sql语句重写成一条风格很酷的sql语句,然后再发出去。 官方文档说,这种insert写法可以提高性能(”This is considerably faster (many times faster in some cases) than using separate single-row INSERT statements”)

一个注意事项

需要注意的是,即使rewriteBatchedStatements=true, batchDelete()和batchUpdate()也不一定会走批量: 当batchSize <= 3时,驱动会宁愿一条一条地执行SQL。所以,如果你想验证rewriteBatchedStatements在你的系统里是否已经生效,记得要使用较大的batch.

更多细节看这个帖子:
blog.yemou.net/article/query/info/tytfjhfascvhzxcyt397
全部回答
通过导入文件的方式插入,文件可以用其他方式先生成,比如使用java,来生成data1.txt,然后使用下面的sql语句: load data local infile 'd:/data1.txt' replace into table hk_acinfo lines terminated by '\\r\\n' 使用这个方法,我插入过1千万以上的数据,如果没有网络影响的话,每秒1m+/s的速度写入,很快的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我是海南的,目前正在使用的是50元风行卡(oc
求助狂牛加密视频破解提取
女主角是现代一个穿越会所的人,她被师父派去
求下大家一拳超人都在哪儿看的.我怎么找
同榻的意思是什么啊?知道的请说下!
什么药才能清除掉头皮细菌
公政村地址在什么地方,想过去办事
分手赔偿协议书需要公证吗?
最早能反映急性心肌梗死发生的酶学检查是A.肌
查干喇嘛沟地址在哪,我要去那里办事
万物生长电影台词梦是会醒的前一句是什么
芋头炆腩肉做法
大河村地址好找么,我有些事要过去
win7家庭普通版能安装Eprime程序么?怎么安装
沈谋研虑的意思是什么啊?知道的请说下!
推荐资讯
宽带机顶盒怎么用
我那天最近在cctv5上 看到关于nba饮料广告,
订火车票可以提前多少天
料柬的意思是什么啊?知道的请说下!
北京市启明职业技能培训中心地址好找么,我有
沙园到北京路有直达车吗?
净水器的碳棒滤芯第一次没有冲洗直接用了,净
广州市嘉华花都置业有限公司花都皇冠假日酒店
怎么看内存条兼容不兼容
喜腾网怎么样
求职时,用人单位承认函授本科学历吗
c语言 求四元二次方程解个数
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?