首先想到的是,一条一条更新的速度太慢了,然后就想批量更新,一次更新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的方式,不然会没有把旧表的索引复制过来

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

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

    Spring+Mybatis 手动控制事务 参考: https://blog.csdn.net/qq_41750175/article/details/87621170 public boolean ...

  2. sqlite批量处理数据性能优化

    最近设计到sqlite数据库批量操作的,性能很是问题.于是一番研究(站在巨人肩膀)从网上整理出来相关性能优化方向.大体分三个级别,一般第一个阶段已足够. 1.sqlite每次插入数据(每调用一次sql ...

  3. MySQL批量SQL插入性能优化

    对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的. ...

  4. mysql批量更新数据,循环select记录然后更新某一字段

    -- 处理IEMI重复的历史数据,建档日期(只有年月日)倒序,档案ID倒序,根据IMEI查档案,查询的结果,相同IMEI下的第一条记录的IEMI不处理,其他的记录的imei 改为空. -- USE ` ...

  5. mysql批量更新数据,即:循环select记录然后更新某一字段

    原因: 今天遇到一个问题:一个数据表case_folder_info想要实现自定义排序功能,就在表里新加了一个字段SORT_NUMBER,由于表里存在已有数据,所以这个SORT_NUMBER字段都为空 ...

  6. mysql批量更新数据

    CREATE PROCEDURE `sp_update_temp_data`( out po_returnvalue ) ) leave_top:BEGIN #Routine body goes he ...

  7. iOS边练边学--UITableView性能优化之三种方式循环利用

    一.cell的循环利用方式1: /** * 什么时候调用:每当有一个cell进入视野范围内就会调用 */ - (UITableViewCell *)tableView:(UITableView *)t ...

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

    作者: 字体:[增加 减小] 类型:转载 时间:2013-10-02 我要评论 在mysql中批量更新我们可能使用update,replace into来操作,下面小编来给各位同学详细介绍mysql ...

  9. mybatis学习之路----批量更新数据两种方法效率对比

    原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...

随机推荐

  1. Redis for OPS 06:Redis Cluster 集群

    写在前面的话 前面的主从,HA 都只是解决我们数据安全性方面的问题,并没有解决我们业务瓶颈的问题.当业务并发到达一定瓶颈的时候,我们需要对服务进行横向扩展,而不是纵向扩展.这就需要引入另外一个东西,R ...

  2. OpenGL入门1.6:坐标系统,3D箱子

    每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 前言 我们已经学习了如何利用矩阵变换来对所有顶点进行变换 OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备 ...

  3. ElasticSearch安装中文分词器IK

    1.安装IK分词器,下载对应版本的插件,elasticsearch-analysis-ik中文分词器的开发者一直进行维护的,对应着elasticsearch的版本,所以选择好自己的版本即可.IKAna ...

  4. Python 爬取大众点评 50 页数据,最好吃的成都火锅竟是它!

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 胡萝卜酱 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  5. MVC模式和Spring MVC初识

    概述 传统的Model1和Model2 在Model1的模式下,整个Web应用几乎全部是由JSP页面组成,接受和处理用户请求,并对请求处理后直接做出响应:JSP身兼View和Controller两个角 ...

  6. 何为http?何为RPC?

    RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Transfer Protocol,超文本传输协议)他们最本质的区别,就是RPC主要工作在TCP协议 ...

  7. paypal开发指南

    一.开发者地址: https://developer.paypal.com 使用在paypal上注册的账号登陆即可, 二.沙箱账号 paypay自动会为你创建两个沙箱账号,一个商家,一个买家.在acc ...

  8. 协议分析中的TCP/IP网络协议

    - 链路层 第一层包含源mac及目的mac,随着传输路径的变化会发生变化,在mac之后,是下层网络协议的类型,图中,下层为IP协议. 在协议解析中,需要关注的是图中type这个字段的内容. - 网络层 ...

  9. [b0038] python 归纳 (二三)_多进程数据共享和同步_队列Queue

    1  队列读写 # -*- coding: utf-8 -*- """ 多进程 共享 队列 multiprocessing.Process 逻辑: 一个进程往队列写数据, ...

  10. 判断map是否包含另一个map

    判断map是否包含另一个map: map不同与list集合,list集合有直接判断集合是否包含其他集合或者元素的方法. boolean contains(Object o) 如果list包含指定的元素 ...