mysql的insert与update效率提高上万倍的经历

mysql数据库大表,插入还是更新? 操作的速度取决于多种因素,包括表的大小、索引设计、锁机制、存储引擎以及具体的操作场景。假设有一个包含 1000 万行数据的表。希望这些分析和建议对你有所帮助!在 MySQL 数据库中, 阅读详情

公司最近要做类似关注与粉丝的功能,需要将之前已经加为好友或者已经提交好友请求的数据转化为follow关系,我设计了两个表,follow和fan,同时在user_info表中添加了follow_count和fan_count两个字段,在功能上线之前,需要将现网的数据导出,然后转化为follow关系再导入,总数据为75万条(社区刚放开,还没有大规模推广)。

 

策略1:

根据导出的经过排序的uid来操作,一共75万insert操作,75万update操作,整理写成sql文件, 直接cat sql | mysql 执行,居然一个下午都没有完成,通过show processlist发现没死,还在一个一个执行,只能中断操作

 

策略2:

将策略1生成的sql请求分成10份,有点并行操作的意思,结果还是一下午没有做完(其实没有从本跟上解决问题)

 

策略3:

经过分析,确定问题肯定在随机uid的insert和update操作使得mysql频繁的跨库跨表lock table和unlock taoble,时间都花费在表的切换上了。于是决定将操作按照db和table进行分类, 采用了multimap结构,

 

multimap< string, string >  insert_query;

multimap< string, string >  update_query;

 

以db_xx.table_xx为key,value就是要执行的sql,这样生成了两个sql:insert.sql和update.sql, 执行结果:

 

insert complete --- sns_user_97.user_follow_96

insert complete --- sns_user_97.user_follow_97

insert complete --- sns_user_97.user_follow_98

insert complete --- sns_user_97.user_follow_99

insert complete --- sns_user_98.user_follow_00

insert complete --- sns_user_98.user_follow_01

insert complete --- sns_user_98.user_follow_02

insert complete --- sns_user_98.user_follow_03

insert complete --- sns_user_98.user_follow_04

insert complete --- sns_user_98.user_follow_05

insert complete --- sns_user_98.user_follow_06

insert complete --- sns_user_98.user_follow_07

 

 

可以清晰的看到,顺序执行sql操作使得lock table造成的消耗降到了最低,最终结果:

 

update  1分钟内完成

insert    10分钟完成

 

策略4:

将策略3的结果sql按照key分成N块,起N个进程并行执行,这样会在1分钟之内完成,因为不同的表根本不会有锁的进程,效率提升会又上一个量级

 

从这个经验我想到了两点:

1.任务的队列化,如果任务的执行会涉及到大范围的随机跳转操作,而这种跳转还会引起资源竞争,那么最好的办法就是将任务队列化,按照跳转最少,资源竞争最少的原则进行排序。

2.在任务队列化的基础上,map/reduce

 

(备注:咱机器不行,大家不要太在意那个10分钟的时间消耗,我只是说有下这种思路,希望大家多多拍砖)

微信聊天记录丢失原因与恢复方案详解 SQLite数据库作为移动应用常见的本地存储方案,其加密机制和存储结构直接影响数据安全性。以微信为例,聊天记录存储在EnMicroMsg.db等SQLite文件中,采用AES加密保护。当手机清理工具误删这些文件时,会导致特定时间段记录丢失。理解数据恢复原理需要掌握文件系统删除机制和闪存特性,其中关键点包括TRIM指令的影响和数据块覆盖风险。通过专业工具如DiskDigger或iMyFone D-Back,配合ADB调试和SQLite数据重组技术,可在黄金时间窗口内恢复记录。日常维护建议结合自动化备份方案和存 阅读详情

相关推荐

手把手教你用Wireshark国密版分析TLCP和IPSec协议(附下载地址)

本文详细介绍了Wireshark国密版在TLCP和IPSec协议分析中的实战应用,包括环境配置、协议解析、合规性检查及高级分析技巧。该工具针对商用密码算法(如SM2/SM3/SM4)进行了专项优化,支持GB/T 38636-2020 TLCP和GB/T 36968-2018 IPSec VPN等国家标准,帮助开发者与安全工程师高效完成密评分析任务。

weixin_29325955的博客 553

数据库操作优化(insert、update、delete、select)

一、insert优化: 要操作的表为test,字段test。这里优化的方式是先组合一条多行的sql语句,然后再进行插入操作,这样就很大程度上优化了插入数据的效率。 测试代码如下: $sql = "insert into `test` (`test`) values('$co

精彩人生 1244

Hypermesh到Abaqus CEL网格转换全攻略:解决欧拉体导入难题

本文详细解析了Hypermesh到Abaqus CEL网格转换的全流程,重点解决欧拉体导入难题。通过单元类型转换、INP文件编辑和多组件合并技术,实现流固耦合仿真的高效前处理。文章包含实用脚本和工程案例,帮助工程师突破ABAQUS CEL分析中的网格转换瓶颈。

weixin_30832143的博客 191

oracle undo表空间与redo日志

undo表空间与redo日志文件在oracle中的作用非常重要,本文重点介绍undo回滚段的作用与特点,同时简单介绍undo与redo的区别和各自己的作用: 一.undo中数据的特点: 1。是数据修改前的备份,主要是保证用户的读一致性 2. 在事务修改数据时产生 3。至少保存到事务结束 二。undo数据的作用: 1.回滚(rollback)操作 2.实现读一...

weixin_34062469的博客 525

UG NX与PLC-1500的在环虚拟测试

TIA、PLCSIM、NetToPLCsim、KEPServerEX以及UG NX的在环虚拟测试

lvtlvtlvtlvt的博客 4220

中文顶刊《会计研究》文本分析技术最新进展总结盘点

会计研究》是由中华人民共和国财政部主管、中国会计学会主办的国家一级学术期刊,为会计领域中文顶级期刊。随着大数据技术的日益成熟, 社交网络类文本 、上市公司披露类文本、媒体报道类文本、 其他类文本 、网络搜索数据、P2P 网络借贷文 本与分析师报告等文本数据逐渐成为财务会计的研究素材。

qq_52891550的博客 2892

20w条数据MySQL速度_有20万条数据,使用mysql数据库,insert与update哪个速度快;

展开全部insert会更快一点,可以使用 INSERT INTO SELECT FROM < source_table> 高效地将大量行从一个表(例如临时表)。传输到按62616964757a686964616fe4b893e5b19e31333431363637最小方式记录日志的其他表中。按最小方式记录日志可以提高语句的性能,减少在事务期间此操作填充可用事务日志空间的可能性。IN...

weixin_31155097的博客 1974

基于IC动态加权的机器学习多因子选股策略:从模型融合到实战回测

在量化投资领域,多因子选股模型通过挖掘市场数据中的有效信号来预测股票收益。其核心原理在于利用统计学与机器学习算法,从海量因子中识别出与未来收益具有稳定相关性的特征。这一技术的核心价值在于将主观投资决策转化为系统化、可重复的客观过程,从而在控制风险的前提下追求超额收益。其典型应用场景包括股票阿尔法策略构建、Smart Beta产品设计以及资产配置中的股票筛选环节。本文聚焦于如何通过信息系数(IC)这一关键指标,动态融合Ridge回归、MLP神经网络和随机森林等多个预测模型,构建一个能够自适应市场风格轮动的选股

weixin_34216614的博客 451

mysql delte_[转载]MySQL的insert、replace和update语句执行效率

测试insert、replace和update语句执行效率测试程序#include #include #include #include #include #include "/usr/local/include/mysql/mysql.h"using namespace std;MYSQL mysql;void exiterr(int exitcode){printf("%sn", mysql_...

weixin_33557333的博客 837

Latex | IEEE双栏排版中长公式的排版

IEEE双栏排版中,有时候公式过于长了,过宽,导致单栏排版不下。

qq_43466146的博客 1万+

手把手教你用NE555+LM324搭建红外倒车雷达(附Multisim仿真文件)

本文详细介绍了如何使用NE555定时器和LM324运算放大器搭建一个红外倒车雷达系统。内容涵盖从核心原理拆解、模块电路设计(包括红外发射、接收放大、检波与电压比较)到实战焊接调试的全过程,并提供了Multisim仿真验证思路,帮助电子爱好者与初学者将模拟电路理论转化为可工作的实用项目。

echo99的专栏 678

提升mysql大数据插入或者更新数据条目的执行效率

我在做项目的时候有这么个需求,我需要对每天产生的16000条数据进行批量的更新修改, 首先我们先在数据表里面查询新的数据条目是否已经在现有的表里存在,如果存在就执行update方法,如果不存在就直接执行insert方法 我的做法就是 for(循环16000条数据){ String sql = "select * from user where userid=? and uname=? an

思考的蜗牛 8791

前端使用二开Thingsboard一、二、三事(三)-规则链

以项目实战为基础,逐步介绍前端在thingsboard系统二次开发中的一些注意事项以及一些thingsboard一些页面功能讲解,为前端人员开发使用thingsboard提供一种可靠思路,打造一个完美的物联网系统。

weixin_43163457的博客 863

insert和update的一些性能对比测试

这是学习笔记的第1933篇文章 今天在做中间件的测试时,突然想到之前的一些思路也可以借鉴一下,这块的内容还是比较有意思,简单剧透一下,如何把drop操作转换为alt...

杨建荣的学习笔记 3420

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

mysql批量插入跟更新_Mysql批量插入和更新的性能

利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题。1.批量插入。我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不固定),循环3000次。每次在循环到100次左右的时候,会出现“com.jolbox.bonecp.ConnectionPartition - BoneCP detected an unclosed c...

weixin_36444022的博客 577

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

mysql 插入更新多条数据的效率问题

http://topic.youkuaiyun.com/u/20110310/13/3279054f-5022-4fac-baa7-d194f5335ba0.html http://www.rosoo.net/a/201103/11043.html http://topic.youkuaiyun.com/u/20080921/18/718f167e-e030-439d-a206-b2dc3dc99a3f.ht

linfengfeiye的专栏 1037

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

mysql 主键重复则覆盖_sql实现插入数据主键重复或数据已经存在,则更新这条数据...

插入数据主键重复或数据已经存在,则更新这条数据了这个可以使用ON DUPLICATE KEY UPDATE了,下面我们来看一下如何实现我们需要的要求。在做数据库开发的时候,经常会遇到这样的一种情景:当一条数据不存在的时候,插入这条数据,如果这条数据的主键已经在数据库中存在,那么更新这条数据。你们一般怎么做呢?先根据主键查询数据,然后判断是否存在数据,如果存在数据,则update字段,否则inser...

weixin_35322457的博客 4200

update加索引还是很慢_insert和update的一些性能对比测试

这是学习笔记的第1933篇文章 今天在做中间件的测试时,突然想到之前的一些思路也可以借鉴一下,这块的内容还是比较有意思,简单剧透一下,如何把drop操作转换为alter,如何把alter操作转换为DML操作,其实都是设计中的一些经验法则,而今天要聊的是另外一个,如何把一个update转换为一条insert.先说下问题的背景,最近在测试一个业务时,业务的并发很高,我们在应用架构改造中...

weixin_39622225的博客 818

mysql对大表执行update速度慢时,试试改用insert可能会有意想不到的发现

实例:需要根据用户日志的ip地址计算出其地理地址 表结构: 用户日志表(200万条记录),其中address是待填充的字段: CREATE TABLE `tmp_open_ip` ( `email` varchar(60) NOT NULL DEFAULT '', `address` varchar(50) NOT NULL DEFAULT '', ...

weixin_33985507的博客 1905

mysql批量更新方式的比较

sql mysql 批量更新 Update 效率 replace duplicate

m0_52133525的博客 2655

mysql insert update慢,MySQL插入,更新非常慢

Our server database is in mysql 5.1we have 754 tables in our db.We create a table for each project. Hence the large no of tables.From past one week i have noticed a very long delay in inserts and upda...

weixin_29795345的博客 657

20w条数据MySQL速度_有20万条数据,使用mysql数据库,insert与update哪个速度快

MySQL 5.7.12主要测试 不同刷盘参数e68a8462616964757a686964616f31333433643032 对性能的影响, 使用以下三个场景:sync_binlog=1, innodb_flush_log_at_trx_commit=1, 简写为b1e1 (binlog-1-engine-1)sync_binlog=0, innodb_flush_log_at_trx_co...

weixin_34616304的博客 1168

MySQL中修改数据的命令: INSERT、UPDATA、DELETE。

INSERT:向数据库插入新的记录 INSERT语句的基本语法: INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...); 练习命令: INSERT INTO students (id,class_id,name,gender,score) VALUES(20,2,"诸葛钢铁","女",88); 运行SELECT * FROM students;命令得到: 在本练习中也可以不用列出id字段和对应的值,因为在这题中id字段是一个自增主键,

weixin_49198853的博客 7472

mysql多表批量插入数据根据唯一索引选择插入还是更新ON DUPLICATE KEY UPDATE

在一次做项目后台统计的时候出现了一个问题:怎么从其他表(例如日志表)批量插入数据到统计表当中,我的数据库用的是mysql,而且这个时候还要考虑是是否存在该条记录选择插入还是更新,那个时候对我这个菜鸟还是有点难度的,后来查了一些资料,最好使用的是ON DUPLICATE KEY UPDATE,但是我查了半天没查到是将其他表批量插入的sql,倒是可以用mybatis通过<collection&g...

weixin_42736075的博客 910

Oracle数据库更新和插入哪个更快?数据库实测

Oracle数据库更新和插入哪个更快?数据库实测,Oracle数据库在1千万条数据前提下,根据主键更新和插入新数据的速度相差不大。

weixin_46967040的博客 1696
上一篇: core文件生成时代进程号
下一篇: fastcgi如何取得url或者cookie
cleanfield
博客等级 码龄21年 126粉丝 189原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值