mysql批量更新数据(性能优化) 第一种方式

首先想到的是,一条一条更新的速度太慢了,然后就想批量更新,一次更新N条数据。实践是检验真理的唯一标准,不一会儿,代码就敲完了,重新试了一下,效果依旧不理想。啊哦,真是要崩溃!后面又想到了利用异步,我一下子开多个mysql连接,同时处理,可是依旧慢的一笔。然后就放弃了,更新的效率肯定是满足不了了。然后就想着绕弯子了,我新建一张表,把旧表数据取出来,处理完后,直接插入到新表,然后再把旧表删除,把新表重新命名成旧表的名字。想想,insert into的速度应该会比update快不少。但是要把旧表数据全部取出来,内存会爆掉,所以我就用慢慢取的方式, select+limit。试了一下,速度快了不少,但是感觉也得跑个一个多小时。虽然快了很多,但是这速度肯定还是不行。

然后试了下,select的时候用select + where + order by + limit的方法,where和order by都是用time去处理,跑了一下,十来分钟就搞定了。后面想想,where和order by的时候用表的主键去处理,应该会快点,然后就试了一下,哇塞,效果很明显,select + where + order by + limit的方法(用主键去处理where 和order by) ,一分钟就处理完了所有数据。取一次数据,处理完数据后,插入一次数据,可以根据自己的数据量大小,适当调整一次要select多少条数据出来。记住,select出来后,处理完,一次性插入新表,不要一条条插入!

最终结果,用select + where + order by + limit的方法(用主键去处理where 和order by) ,一分钟左右就处理完了五百万条左右的数据,有好几张表,其中有两张表都各有一两百万条的数据,而最初的那种逐条update的方法,预计得十个小时以上。虽然几经波折,最后终于放心地交差了。

 重点:普通的select方式取出来速度很慢,插入新表的方案,性能的关键点在于从旧表select出数据,至于插入,只要使用批量插入就好啦!

小插曲: 创建新表的时候,我是用复制旧表结构的方式去创建的,复制旧表结构的时候,记得使用create table newTableName like oldTableName的方式,不然会没有把旧表的索引复制过来

原文地址:https://www.cnblogs.com/maohuidong/p/11788187.html

时间: 2024-08-27 16:34:13

mysql批量更新数据(性能优化) 第一种方式的相关文章

mysql批量更新数据(性能优化)--第二种方式

Spring+Mybatis 手动控制事务 参考: https://blog.csdn.net/qq_41750175/article/details/87621170 public boolean testDelete(String jobCode) throws Exception { boolean flag = false; //1.获取事务控制管理器 DataSourceTransactionManager transactionManager = HqznContext.getBea

mysql批量更新数据(性能优化)

最近做的游戏,上线后出了不少问题,所以我就经常去查数据库数据,翻各种日志等,但是在查询的时候发现好蛋疼,有些地方的时间是写 "2016-08-11 20:13:02"这种格式,有些地方的时间是写 "1470917582000"这种格式,然后多张表数据进行对比的时候就很蛋疼,我得不停进行时间转换,恶心得不行.最后实在忍不了,我要统一时间格式(由于时间都是单独一个字段记录,所以比较好处理),两种格式,很明显,对于查数据来说,第一种格式更直观,所以就决定了,将数据库日志类

转载--批量更新数据(性能优化)

最近做的游戏,上线后出了不少问题,所以我就经常去查数据库数据,翻各种日志等,但是在查询的时候发现好蛋疼,有些地方的时间是写 "2016-08-11 20:13:02"这种格式,有些地方的时间是写 "1470917582000"这种格式,然后多张表数据进行对比的时候就很蛋疼,我得不停进行时间转换,恶心得不行.最后实在忍不了,我要统一时间格式 (由于时间都是单独一个字段记录,所以比较好处理),两种格式,很明显,对于查数据来说,第一种格式更直观,所以就决定了,将数据库日志

MySQL批量SQL插入性能优化

对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的.经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考. 1. 一条SQL语句插入多条数据.常用的插入语句如: INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUE

MySQL批量SQL插入性能优化详解

对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的.经过对MySQL innodb的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考.1. 一条SQL语句插入多条数据.常用的插入语句如: INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES

MySQL批量更新数据总结

方法一 :case...when...then...endMySQL实现一条sql完成多条数据的更新 方法二: ON DUPLICATE KEY UPDATE用法(需要利用主键索引或唯一索引冲突,来决定是插入还是更新)mysql实现upsert 原文地址:http://blog.51cto.com/phpme/2309019

毕设的学习(14)MySQL批量更新数据

https://www.cnblogs.com/ldj3/p/9288187.html https://www.jb51.net/article/100747.htm 原文地址:https://www.cnblogs.com/ChangeMyWorld/p/11782303.html

mysql 批量更新与批量更新多条记录的不同值实现方法

在mysql中批量更新我们可能使用update,replace into来操作,下面来给各位详细介绍mysql 批量更新与性能吧! mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 复制代码代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 复制代码代码如下: UPDATE mytable SET myfie

数据持久化的一种方式

/** *数据持久化的四种方式 * *1-------属性列表 * *2-------对象归档 * *3-------SQLite3 * *4-------Core Data * *下面是数据持久化的第一种方式-----写入文件 */ /** *写入文件思路 * *1-----获取需要写入的文件对象 * *2-----获取需要写入的文件对象的文件路径 * *3-----写入文件 * *4-----读取文件 */ NSString* string=@"Copyright (c) 2015年 妖精的