MySQL大批量数据插入,PHP之for不断插入时出现缓慢的解决方案及优化(转载)

Unity工业数据可视化:基于ModbusTCP的实时数据通信实战 本文详细介绍了在Unity中实现工业数据可视化的核心方法,重点讲解了基于ModbusTCP协议与PLC等工业设备进行实时数据通信的实战流程。内容涵盖NModbus库的集成、Modbus Slave模拟器的使用、TCP连接的建立与多线程安全通信、数据读写与解析,以及如何将实时数据驱动3D场景,为构建工业数字孪生与监控系统提供完整解决方案。 阅读详情
 公司有一个项目,需要频繁的插入数据到MySQL数据库中,设计目标要求能支持平均每秒插入1000条数据以上。目前功能已经实现,不过一做压力测试,发现数据库成为瓶颈,每秒仅能插入100多条数据,远远达不到设计目标。 

     到MySQL官方网站查了查资料,发现MySQL支持在一条INSERT语句中插入多条记录,格式如下: 
INSERT table_name (column1, column2, ..., columnN) 
VALUES (rec1_val1, rec1_val2, ..., rec1_valN), 
(rec2_val1, rec2_val2, ..., rec2_valN), 
... ... 
(recM_val1, recM_val2, ..., recM_valN); 

  按MySQL官方网站,用这种方法一次插入多条数据,速度比一条一条插入要快很多。在一台开发用的笔记本电脑上做了个测试,果然速度惊人。 


  测试环境:DELL Latitude D630, CPU T7250 @ 2.00GHz, 内存 2G。Windows XP Pro中文版SP2,MySQL 5.0 for Windows。 

  MySQL是新安装的,建立了一个名为test的数据库,在test数据库建了一个t_integer表,共两个字段:test_id和test_value,两个字段都是INTEGER类型,其中test_id是Primary Key。 

  准备了两个SQL脚本文件(写了个小程序生成的),内容分别如下: 

复制代码
-- test1.sql 
TRUNCATE TABLE t_integer; 
INSERT t_integer (test_id, test_value) 
VALUES (1, 1234), 
(2, 1234), 
(3, 1234), 
(4, 1234), 
(5, 1234), 
(6, 1234), 
... ... 
(9997, 1234), 
(9998, 1234), 
(9999, 1234), 
(10000, 1234);
复制代码
复制代码
-- test2.sql 
TRUNCATE TABLE t_integer; 
INSERT t_integer (test_id, test_value) VALUES (1, 1234); 
INSERT t_integer (test_id, test_value) VALUES (2, 1234); 
INSERT t_integer (test_id, test_value) VALUES (3, 1234); 
INSERT t_integer (test_id, test_value) VALUES (4, 1234); 
INSERT t_integer (test_id, test_value) VALUES (5, 1234); 
INSERT t_integer (test_id, test_value) VALUES (6, 1234); 
... ... 
INSERT t_integer (test_id, test_value) VALUES (9997, 1234); 
INSERT t_integer (test_id, test_value) VALUES (9998, 1234); 
INSERT t_integer (test_id, test_value) VALUES (9999, 1234); 
INSERT t_integer (test_id, test_value) VALUES (10000, 1234); 
复制代码


  以上两个脚本通过mysql命令行运行,分别耗时0.44秒和136.14秒,相差达300倍。 

  基于这个思路,只要将需插入的数据进行合并处理,应该可以轻松达到每秒1000条的设计要求了。 

  补充:以上的测试都是在InnoDB表引擎基础上进行的,而且是AUTOCOMMIT=1,对比下来速度差异非常显著。之后我将t_integer表引擎设置为MyISAM进行测试,test1.sql执行时间为0.11秒,test2.sql为1.64秒。 

  补充2:以上的测试均为单机测试,之后做了跨机器的测试,测试客户端(运行脚本的机器)和服务器是不同机器,服务器是另一台笔记本,比单机测试时配置要好些。做跨机器的测试时,发现不管是InnoDB还是MyISAM,test1.sql速度都在0.4秒左右,而test2.sql在InnoDB时且AUTOCOMMIT=1时要80多秒,而设置为MyISAM时也要20多秒。 

  方法一:用PHP构造一次插入多条,并多次以for插入,像装车一样,一车一车的把sql运过去。 

<?php
for($i=0;$i<10;$i++){
mysql_query("insert into table_name (name,age) values ('name1','age1'),('name2','age2'); //一车:i=1,第二车:i=2
}
?>

  方法二:如果是网络和循环太慢,则建议用C来做这个事情,会提高三倍左右的速度,相对PHP可能会有相当的提升。 
  方法三:用队列来做,分多个进程实现,可能有一定程序的时间上提高,同时要注意binlog的影响及索引的影响。BY:Jack

从零到一:STM32G431的DSP库集成与FFT实战避坑指南 本文详细介绍了在STM32G431微控制器上集成CMSIS-DSP库并进行FFT实战开发的完整流程。重点解析了通过CubeMX和Keil环境配置DSP库的关键步骤、编译器宏定义陷阱及解决方案,并提供了FFT算法优化、内存管理及常见问题诊断的实用技巧,帮助开发者高效实现嵌入式信号处理应用。 阅读详情

相关推荐

nature子刊:MCNN基于电池故障诊断的模型约束的深度学习方法

本研究提出了一种基于模型约束神经网络(MCNN)的锂离子电池在线故障诊断方法,整合物理模型与深度学习,有效解决了随机工况下传统方法诊断精度低、依赖故障样本等问题。通过统计修正电池包模型和双向LSTM网络,实现了电池状态的高精度预测(平均RMSE 3.9%),并设计模型耦合自动编码器提取可解释特征。在包含18.2百万条真实车辆数据的验证中,该方法故障检测TPR在FPR=0.1时达85%,较基准方法提升超46.5%,且能提前30分钟预警内部短路等故障。研究还展示了算法在跨电池包结构迁移中的优越性,为工业应用提供

hasakie的博客 1757

MySQL大批量数据插入,PHP之for不断插入时出现缓慢的解决方案及优化。

很多时候为了测试数据库设计是否恰当,优化SQL语句,需要在表中插入大量的数据,怎么插入大量的数据就是个问题了。 最开始想到的办法就是写一个程序通过一个很大的循环来不停的插入,比如这样: 1 2 3 4 int i = LOOP_COUNT; while(i-->=0){ //insert data here. } 不过我在

摘取天上星 3990

Ubuntu 18.04下Freesurfer 7.2.0安装全攻略:从下载到环境配置一步到位

本文详细介绍了在Ubuntu 18.04系统上安装Freesurfer 7.2.0的完整流程,包括系统准备、依赖安装、下载解压、环境配置、许可证获取及性能优化。Freesurfer作为神经影像分析的重要工具,支持皮层重建和体积分割等复杂任务,适用于阿尔茨海默症等神经系统疾病研究。指南还提供了常见问题解决方案和实际应用案例,帮助用户快速搭建高效的神经影像分析平台。

omega的博客 996

MySQL大批量数据插入,PHP之for不断插入时出现缓慢的解决方案及优化(转载)...

公司有一个项目,需要频繁的插入数据到MySQL数据库中,设计目标要求能支持平均每秒插入1000条数据以上。目前功能已经实现,不过一做压力测试,发现数据库成为瓶颈,每秒仅能插入100多条数据,远远达不到设计目标。 到MySQL官方网站查了查资料,发现MySQL支持在一条INSERT语句中插入多条记录,格式如下: INSERT table_name (column1, co...

weixin_30709809的博客 371

告别环境配置烦恼:用Conda一键搞定GATK4、samtools、fastp等生信分析全家桶

本文介绍如何利用Conda快速搭建包含GATK4、samtools、fastp等工具的生物信息学分析环境,解决软件安装和版本冲突问题。通过详细的配置步骤和实战案例,帮助研究者十分钟内完成重测序分析全家桶的环境配置,显著提升上游分析效率。

weixin_30753873的博客 334

Python实战:用jieba和WordCloud打造电商评论情感分析工具(附完整代码)

本文详细介绍了如何使用Python的jieba分词和WordCloud库构建电商评论情感分析工具,涵盖数据预处理、情感分析、可视化展示等关键步骤,并提供完整代码实现。通过该工具,开发者可以高效分析电商评论数据,挖掘消费者情感倾向,为产品改进和决策提供数据支持。

weixin_30316097的博客 413

二叉树 - 通过不断的插入生成一棵二叉搜索树(C语言)

二叉搜索树:其各个节点的关键字码必须是唯一的;若某结点左子树非空,则左子树上的所有节点的值均小于该结点的关键字码,而其右子树上的所有节点的值均大于该结点的关键字码。所以,按照中序周游整个二叉树的可以得到一个由小到大的有序排列。通过不断读取数组中的数据而插入生成的二叉搜索树的代码如下:/* 二叉搜索树 - 通过不断插入建立一棵二叉搜索树 */ #include "stdafx.h" #includ...

biaogexf 4545

泰山派RK3576开发板部署Qwen3-VL-4B多模态模型实战指南:从模型转换到板端推理全流程

本文提供了在泰山派RK3576开发板上部署阿里Qwen3-VL-4B多模态模型的完整实战指南。详细介绍了从环境准备、模型转换(包括视觉模型转换为.rknn格式和语言模型转换为.rkllm格式)、交叉编译到板端推理的全流程,重点讲解了如何利用RK3576的NPU进行硬件加速,实现高效的边缘AI应用。

weixin_30356433的博客 257

不停地向一维数组插入元素,并保持顺序

package day21; import java.util.Scanner;//调用Scanner一个简单的文本扫描器 import static net.mindview.util.Print.*; import java.util.Random; public class Show { public static void main(String[] args){ int [] a1={10,12,45,90}; Scanner scanner=ne.

m0_55997161的博客 680

YOLOv11涨点改进| CVPR 2026 | 全网独家首发、特征融合改进篇| 引入SRFusion 空间细化多级融合,含多种创新融合改进,涨点可直接发论文,适合裂缝图像检测,小目标检测任务高效涨点

🔥本文提出SRFusion空间细化多级融合模块,用于改进YOLOv11网络模型。该模块通过高分辨率特征引导低分辨率语义特征的融合,利用空间注意力机制对上采样后的特征进行加权细化,增强多尺度特征间的空间细节交互。SRFusion模块能够提升模型对目标区域的表达能力,有效改善小目标、密集目标及复杂背景场景下的检测效果,同时保持YOLOv11的高效性与实时检测性能。文章详细介绍了模块结构、实现原理、核心代码及在YOLOv11中的三种配置方法,为模型优化提供了创新解决方案。

Ai缝合怪、助力小伙伴高效发论文 147

【Flink】FLink session yarn kerberos认证报错 PortUnreachableException: ICMP Port Unreachable

本篇博客是在上一篇博客:【Flink】FLink session yarn kerberos认证报错 KrbException: Cannot locate default realm还没找到原因的时候做的一次尝试。因为项目需要,我们需要对接华为认证的yarn集群,运行flink任务,我们的任务分为两种,yarn pre-job模式和flink session模式。我们在配置文件中配置如下# kerberos认证需要的东西提交任务的脚本如下。

九师兄 1267

Mysql-Insert插入过慢的原因记录和解决

我们还可以在代码中,手动开启事物也就是相当于希望事物内执行的语句要作为一个“不可分割”的整体去执行的任务当所有任务完毕后在提交事物,当然这样是没有批量插入快的但是也能节约不少时间的。因为批量插入其实就是访问一次数据量告诉数据库我需要执行这1000条的插入,而不是访问1000次数据库告诉数据库我要执行1条的插入所以使用批量插入大大的缩减客户端与数据库之间的连接、关闭等消耗 , 所以我们在上面的方案中使用一次提交批量数据的更新的语句,那么还有没其他的方式呢?...

weixin_45203607的博客 1万+

手把手教你学Simulink--基于新型通信技术集成的场景实例:无人机利用激光通信实现高速率数据传输

摘要: 本文基于Simulink搭建无人机激光通信仿真系统,解决传统射频通信带宽不足问题。系统通过五层架构(发射机、信道、PAT系统、接收机、性能分析)实现Gbps级高速传输,重点建模大气衰减(雾/雨)、光束发散、PAT精跟踪(Stateflow+PID控制)等核心模块。仿真结果显示:晴天链路可达2.5Gbps(BER 1e-8),浓雾下链路中断,验证了雾是主要性能限制因素。案例涵盖调制方式选择、动态环境仿真及3D可视化,为无人机高速数据传输提供可扩展的仿真框架,并指出混合FSO/RF、AI-PAT等优化方

MHD0815的博客 180

mysql 优化配置 大批量数据插入_MySQL大批量数据插入,PHP之for不断插入时出现缓慢的解决方案及优化(转载)...

公司有一个项目,需要频繁的插入数据到MySQL数据库中,设计目标要求能支持平均每秒插入1000条数据以上。目前功能已经实现,不过一做压力测试,发现数据库成为瓶颈,每秒仅能插入100多条数据,远远达不到设计目标。到MySQL官方网站查了查资料,发现MySQL支持在一条INSERT语句中插入多条记录,格式如下:INSERTtable_name (column1, column2, ..., colum...

weixin_39724469的博客 221

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

php mysql百万级数据_PHP + MySQL百万级数据插入的优化

插入分析在MySQL中插入记录所需的时间由以下因素组成,其中的数字代表大约比例:如果每次插入一条语句都执行一条SQL语句,则需要执行除连接和关闭N次以外的所有步骤,这非常耗时. 有几种优化方法:在每个insert语句中写入多行,批量插入以将所有查询语句写入事务中,并使用Load Data导入数据每种方法的性能如下.Innodb引擎InnoDB为MySQL提供具有事务处理(提交),回滚(回滚)和崩溃...

weixin_33980343的博客 569

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

PHP+MySQL百万级数据插入的优化

插入分析 MySQL中插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例: 连接:(3) 发送查询给服务器:(2) 分析查询:(2) 插入记录:(1x记录大小) 插入索引:(1x索引) 关闭:(1) 如果我们每插入一条都执行一个SQL语句,那么我们...

chuofei7203的博客 364

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

PHP实现插入100万条数据优化

第一种方法一条一条执行插入,结果会很慢 <?php header("Content-Type:text/html;charset=utf-8"); date_default_timezone_set("PRC"); $servername = "localhost"; $port = 3306; $username = "root"; $password ...

AAA138171的博客 844

mysql 测试插入数据_mysql插入测试数据

使用php生成sql文件,然后再倒入mysql。1.编写php代码set_time_limit(0);ini_set("memory_limit", "256M");$pre = "INSERT INTO `article` (`cid`, `name`, `post`) VALUES ";$sql = $pre;$content='';for($i=1; $i<10000000; $i++...

weixin_29543211的博客 598

php7 mysql 内存_php插入mysql大量数据造成内存不足【原创】

在做项目时,需要从excel中读取数据插入数据表,测试的excel表格大概有600条数据左右,结果在插入数据时报错,如下Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)原来是php.ini中的内存分配的问题,默认php代码能够申请到的最大内存字节数就是134...

weixin_32873435的博客 484

PHP大批量更新数据,大批量插入数据,mysql批量更新与插入多种方法

在工作中遇到了需要大批量的更新同步数据,首先用了个笨方法测试,那就是for循环插入与更新。由于数据是从另外一个大型网站的接口中获取的,我本地需要进行处理后,再进行更新与判断,程序执行完成之后,发现耗时太长,仅仅五千条数据就耗时了五个小时左右,非常耗时间。 在进行更新与插入的操作的时候,我们首先必须考虑到文件执行时间的问题。当php文件执行时间过长时,服务器会终止该文件的执行,所以我们要...

weixin_30826761的博客 1029

[转]MySQL innoDB数据插入性能优化

转载自:http://hiyijian.blog.163.com/blog/static/173086472201121621326471/ 起因:有一个innoDB引擎的表Table,在一个大概3000次的foreach循环中执行 INSERT INTO Table(columnA, columnB) VALUES (valueA, valueB) 结果居然超出了60S的php...

aqc802886的博客 351

百万级数据插入的优化

插入分析 MySQL中插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例: 连接:(3) 发送查询给服务器:(2) 分析查询:(2) 插入记录:(1x记录大小) 插入索引:(1x索引) 关闭:(1) 如果我们每插入一条都执行一个SQL语句,那么我们需要执行除了连接和关闭之外的所有步骤N次,这样是非常耗时的,优化的方式有一下几种: 在每个insert...

alct84178的博客 515

php 整行插入mysql_MySQL的多行插入

由于mysql的autocommit默认为打开的,而且很多生产环境都是设置为在事务提交时需要写磁盘,所以提交产生的io开销非常大。在繁忙的MySQL的多行插入由于mysql的autocommit默认为打开的,,而且很多生产环境都是设置为在事务提交时需要写磁盘,所以提交产生的io开销非常大。在繁忙的oltp系统中,可能这是主要的性能瓶劲.因此减少提交的次数非常重要,尽可能采用批量提交的方式而不是使用...

weixin_35452394的博客 191

PHP大批量插入数据库的3种方法和速度对比

PHP大批量插入数据库的3种方法和速度对比 第一种方法:使用insert into 插入,代码如下: 1 2 3 4 5 6 7 $params=array(‘value'=>'50′); set_time_limit(0); echodate(“H:i:s”); for($i=0;$i<2000000;...

weixin_30325793的博客 175

php循环批量优化,PHP优化之批量操作MySQL实例分析

本文实例讲述了PHP优化之批量操作mysql。分享给大家供大家参考,具体如下:设计一个数据表如下:create table optimization( id INT NOT NULL AUTO_INCREMENT, value VARCHAR(10) NOT NULL, PRIMARY KEY(id) );现在有一个业务需求需要批量插入数据。先来看看下面这一段代码:getMes...

weixin_30111715的博客 284
上一篇: php获取数组的长度的方法
下一篇: PHP变量直接在sql语句中使用时的疑惑
puddingpp
博客等级 码龄9年 10粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值