十几万条数据的表中,基于帝国cms 。自己亲身体验三种批量更新数据的方法,每一种的速度是什么样的
需求是 上传Excel 读取里面的数据。根据Excel中某一个字段,与数据表中的一个字段的唯一性。然后把 Excel表中数据和数据库表中数据一次更改。本次测试一次更新31条数据。 本次测试基于帝国cms
方法1 用一个for徐循环把读取的数据放在一个数组中然后在十几万条的数据表中逐条查询更改,用时35s;
$numArr = count($arr);
$m = ceil($numArr/10000);
for($i=1;$i<=$numArr;$i++){
$n = $i*10000;
$j = $n-10000;
for($q=$j;$q<$n;$q++){
$res = $empire->query("update {$dbtbpre}enewsclass set bname='".$arr[$i][1]."',classpagekey='".$arr[$i][2]."',intro='".$arr[$i][3]."' where classpath='".$arr[$i][i]."'");
if($res){
echo "更新成功!路径信息为:".$arr[$i][0];
}
}
}
方法 二;创建临时表。用时23s
$sqls ="DROP TABLE IF EXISTS `linshitbale`;\n";
$sqls .="create Temporary table linshitbale (id int(11) primary key auto_increment,classpath varchar(255),bname varchar(255),intro varchar(255),classpagekey varchar(255));\n";
$bsql ="";
foreach ($arr as $k => $v) {
$k+=1;
$bsql .="(".$k.",'".$v[0]."','".$v[1]."','".$v[3]."','".$v[2]."'),";
}
$bsql = trim($bsql,",");
$sqls .= "insert into linshitbale values ".$bsql.";\n";
$sqls .= "update {$dbtbpre}enewsclass as c,linshitbale as ls set c.bname=ls.bname,c.intro=ls.intro,c.classpagekey=ls.classpagekey where c.classpath = ls.classpath;";
echo $sqls;

第三种方法 :稍加修改批量更新的方法。用时0.9s
UPDATE mytable SET myfield1 = CASE id WHEN 1 THEN 'myvalue11' WHEN 2 THEN 'myvalue12' WHEN 3 THEN 'myvalue13' END, myfield2 = CASE id WHEN 1 THEN 'myvalue21' WHEN 2 THEN 'myvalue22' WHEN 3 THEN 'myvalue23' ENDWHERE id IN (1,2,3)$classpath = array();
$bname = array();
$intro = array();
$classpagekey = array();
foreach ($arr as $key => $value) {
$classpath[] = $value[0];
$bname[] = $value[1];
$intro[] = $value[3];
$classpagekey[] = $value[2];
}
$classpaths = implode("','", array_values($classpath));
$classpaths = "'".$classpaths."'";
$sql = "UPDATE {$dbtbpre}enewsclass\n SET bname = CASE classpath \n";
foreach ($bname as $k=>$v) {
$sql .= sprintf("WHEN '%s' THEN '%s' \n", $classpath[$k], $v);
}
$sql .= " END,\n intro = CASE classpath \n";
foreach ($intro as $key1 => $value1) {
$sql .=sprintf("WHEN '%s' THEN '%s' \n",$classpath[$key1],$value1);
}
$sql .= " END,\n classpagekey = CASE classpath \n";
foreach ($classpagekey as $key2 => $value2) {
$sql .=sprintf("WHEN '%s' THEN '%s' \n",$classpath[$key2],$value2);
}
$sql .= " END\n WHERE classpath IN ($classpaths)";
$result = $empire->query("$sql");
if($result){
echo "success";
}else{
echo "error";
}
如有不懂可以私聊我。qq 517190435
十几万条数据的表中,基于帝国cms 。自己亲身体验三种批量更新数据的方法,每一种的速度是什么样的的更多相关文章
- mysql 常用命令,连接数据库,查看建表语句,批量导入数据,批量更新数据,连接查询
1. 1)MySQL 连接本地数据库,从cmd中进入mysql命令编辑器: root root分别为用户名和密码 mysql -uroot -proot 2)MySQL 连接本地数据库,用户名为“ro ...
- 使用SqlBulkCopy批量插入多条数据进入表中
由于工作中项目需求结算一次生成一批相同批次号的数据插入一个表中,然后再通过另一页面展示出来,所以需要用到一次性插入一批数据,所以就采用了SqlBulkCopy插入一批数据 1 public stati ...
- 使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据
使用PreparedStatement向数据表中插入.修改.删除.获取Blob类型的数据 2014-09-07 20:17 Blob介绍 BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是 ...
- FreeSql (十四)批量更新数据
FreeSql支持丰富的更新数据方法,支持单条或批量更新,在特定的数据库执行还可以返回更新后的记录值. var connstr = "Data Source=127.0.0.1;Port=3 ...
- mysql下的将多个字段名的值复制到另一个字段名中(批量更新数据)字符串拼接cancat实战例子
mysql下的将多个字段名的值复制到另一个字段名中(批量更新数据)mysql字符串拼接cancat实战例子: mysql update set 多个字段相加,如果是数字相加可以直接用+号(注:hund ...
- sqlserver 下三种批量插入数据的方法
本文将介绍三种批量插入数据的方法,需要的朋友可以参考下 本文将介绍三种批量插入数据的方法.第一种方法是使用循环语句逐个将数据项插入到数据库中:第二种方法使用的是SqlBulkCopy,使您可以用其他源 ...
- 【mysql】批量更新数据
概述 批量更新mysql数据表数据,上网搜索基本都会说4~5方法,本人使用的更新方式为: INSERT ... ON DUPLICATE KEY UPDATE Syntax 可参见官方网站:inser ...
- MySql中4种批量更新的方法update table2,table1,批量更新用insert into ...on duplicate key update, 慎用replace into.
mysql 批量更新记录 MySql中4种批量更新的方法最近在完成MySql项目集成的情况下,需要增加批量更新的功能,根据网上的资料整理了一下,很好用,都测试过,可以直接使用. mysql 批量更新共 ...
- 批量更新数据小心SQL触发器的陷阱
批量更新数据时候,Inserted和Deleted临时表也是批量的,但触发器只会调用执行一次!两个概念千万不要弄混淆! 错误的理解:例如:创建在A表上创建了一个Update触发器,里面写的是Updat ...
随机推荐
- Django之ORM外部python脚本使用
python脚本使用django的ROM 如果你想通过自己创建的python文件在django项目中使用django的models,那么就需要调用django的环境: 在总的项目文件夹创建的py文件: ...
- DPDK Mbuf Library(学习笔记)
1 Mbuf库 Mbuf库提供了分配和释放缓冲区(mbufs)的功能,DPDK应用程序可以使用这些mbufs来存储消息缓冲. 消息缓冲存储在内存池中,使用Mempool库. 数据结构rte_mbuf通 ...
- SpringBoot踩坑日记
1.Closing JPA EntityManagerFactory for persistence unit 'default'错误导致springboot启动后终止 --------------- ...
- 【图机器学习】cs224w Lecture 11 & 12 - 网络传播
目录 Decision Based Model of Diffusion Large Cascades Extending the Model Probabilistic Spreading Mode ...
- Element-UI自定义主题
Element-UI自定义主题 1.介绍:我们可以自定义样式去覆盖element-ui的默认样式 // 在项目目录中新建 element-variables.scss 文件 // 上面为修改的变量 $ ...
- 同一父进程下的子进程之间的通信(pipe通信)
首先对于fork命令 通过fork命令创建进程 父进程返回子进程id 子进程返回0 失败返回-1 对于pipe通讯机制 pipe通讯是半双工的 也就是说只能一方读一方写 题目中想要P1的输出作为 ...
- Magicodes.IE 2.2发布
Magicodes.IE 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel.Word.Pdf.Csv和Html.已加入NCC开源组织. Magicodes.IE 2.0发布 Magico ...
- 【C++】变量
注意:以下内容摘自文献[1],修改了部分内容. 1.变量:在程序运行期间其值可以改变的量称为变量.一个变量应该有一个名字,并在内存中占据一定的存储单元,在该存储单元中存放变量的值.变量名代表内存中的一 ...
- [工具推荐]_iOS音频批量转换
通常为了便于市场推广和获得更高的下载量,产品安装包的体积是越小越好.那么问题来了,要如何才能做到使安装包的体积最小化呢.根据产品的组成成分,最终可以大概分为,代码,图片,视频,音频等这几部分,今天我们 ...
- [JavaWeb基础] 008.Spring初步配置
框架简介: Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Develop ...