[分享]mysql 批量更新数据的技巧_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1824 | 回复: 0   主题: [分享]mysql 批量更新数据的技巧        下一篇 
masy
注册用户
等级:少校
经验:1234
发帖:182
精华:0
注册:2011-11-4
状态:离线
发送短消息息给masy 加好友    发送短消息息给masy 发消息
发表于: IP:您无权察看 2014-11-27 14:56:58 | [全部帖] [楼主帖] 楼主

当在开发的时候有时候需要手动修复数据或者更新数据,一般在自己的项目里写一个main函数对数据读取或者修改即可,但执行的时候要从本地连接外网,

如果数据量很大的时候。几十万或者上百万等以上的话,性能会非常的差,这时候把sql语句写好放在数据库里直接执行会好很多。

在mysql数据库里的innodb引擎,一般数据增删改都有内置的事务的,而且有默认的超时限制,好像是50s,如果数据量大而且很多连接查询的话会超时, 

这时候不妨把连接查询的数据创建临时表并对临时表创建索引,然后添加数据或修改数据对临时表进行连接关联,这时候性能会快很多,举个例子:

DROP TEMPORARY TABLE IF EXISTS tmp;
CREATE TEMPORARY TABLE tmp
select b.UserId,b.field1,b.field2, b.field3 from
(select Max(AutoId) as AutoId
from T_Table2  where UserId
group by UserId) a left join T_Table1 b on a.AutoId=b.AutoId;
ALTER TABLE tmp ADD INDEX `index_UserId` (`UserID` ASC) ;
INSERT INTO T_Table3(`UserId`,`field1`,`field2`,`field3`, `CreateTime`,`CreateIp`,`ModifyTime`,`ModifyIp`)
select a.UserId,a.field1,a.field2,a.field3,now(),'127.0.0.1',now(),'127.0.0.1'
from tmp;


    临时表用完之后要删除,DROP TEMPORARY TABLE tmp;

分享一下,继续学习加油中。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论