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

摘要:
逐个更新的速度太慢。直接插入新表,然后删除旧表。插入的速度应该比更新快得多。但是,旧表中的所有数据都应该被删除。选择时,使用+其中+orderby+limit。where和orderby都使用时间进行处理。Where和orderby使用表的主键进行处理,插入一次,每次要选择的数据数量应适当调整。立即插入新表。

   首先想到的是,一条一条更新的速度太慢了,然后就想批量更新,一次更新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批量更新数据(性能优化) 第一种方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇深入k8s:Pod对象中重要概念及用法Web开发、原生开发、混合开发的区别优势:下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle之to_char,to_date用法

[转载自]http://www.jb51.net/article/45591.htm 这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法、字符串和时间互转、求某天是星期几、两个日期间的天数、月份差等用法 TO_DATE格式(以时间:2007-11-02 13:45:25为例) 1. 日期和字符转换函数用法(to_date,...

SQL必知必会

数据库基础——数据库术语数据库:数据库是一个以某种有组织的方式存储的数据集合。数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件)。数据库软件应称为数据库管理系统(DBMS)。数据库是通过 DBMS 创建和操纵的容器。表(table)某种特定类型数据的结构化清单。模式(schema)关于数据库和表的布局及特性的信息。表由列组成。列存...

sql递归

--单表递归 由于项目中经常用到 , 随笔以作下次使用 例如:找ProductType表 下ID为1的分类的所有子级 with result as --result为别名(select * from TB_ProductType where Id=1 --查询ID为1 的数据union allselect TB_ProductType.* from tb...

数据集和JSON相互转换

使用DELPHI原生类实现数据集和JSON相互转换  JSON二要素:数组和对象。对象可以包含数组,数组可以包含对象。无层数限制。OLEVARIANT也类似,OLEVARIANT的一个元素又可以是OLEVARIANT,且无层数限制。XML亦类似。这也是它们能序列一切对象的奥秒所在。JSON就是字符串,定义好序列后的字符串格式,甚至都不需要啥JSON类库,就...

ArcGIS中加载百度地图

现在Google,Bing,OpenStreetMap....众多优秀的免费地图资源都被伟大的祖国给挡在墙外了,这些数据能够提 供真实的GPS数据时多么的难能可贵啊,可惜没有办法,偶也是爱国人士,钓鱼岛是中国的,日本也迟早是中国的!!      在此背景下,国内百度地图水涨船高,一步一个脚印发展迅速,最近也是发现其数据库服务器速度比其他的都快,因此很多东西...

selenium 难定位元素,时间插件,下拉框定位,string

1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: findElement(By.xpath(“”)); 通过元素的标签名称定位元素: findElement(By.tagName(“”)); 通过元素的链接名称...