PHP中进行基础数据库操作怎样优化
Admin 2022-09-17 群英技术资讯 710 次浏览
这篇文章主要讲解了“PHP中进行基础数据库操作怎样优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中进行基础数据库操作怎样优化”吧!设计一个数据表如下:
create table optimization(
id INT NOT NULL AUTO_INCREMENT,
value VARCHAR(10) NOT NULL,
PRIMARY KEY(id)
);
现在有一个业务需求需要批量插入数据。
先来看看下面这一段代码:
<?php
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'root';
$password = 'root';
try {
$dbh = new PDO($dsn, $user, $password);
} catch(PDOException $e) {
echo 'Connection failed: ' , $e->getMessage();
}
$begin = microtime(true) * 1000;
$count = 100;
$stmt = $dbh->prepare('INSERT INTO `optimization` (id, value) VALUES(:id, :value)');
$stmt->bindParam(':id', $id);
$stmt->bindParam(':value', $value);
for ($i = 0; $i < $count; $i++)
{
$id = '';
$value = $i;
$stmt->execute();
}
$end = microtime(true) * 1000;
echo 'excuted : ' , ($end - $begin) , ' ms';
经过测试,上面代码运行结果如下:
1、excuted : 7601.4348144531 ms
2、excuted : 7476.4270019531 ms
3、excuted : 7674.4387207031 ms
平均:7584.100179036433 ms
再来看看第二段代码:
<?php
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'root';
$password = 'root';
try {
$dbh = new PDO($dsn, $user, $password);
} catch(PDOException $e) {
echo 'Connection failed: ' , $e->getMessage();
}
$begin = microtime(true) * 1000;
$dbh->beginTransaction();
try {
$count = 100;
$sql = 'INSERT INTO `optimization` (id, value) VALUES ';
$sql_arr = array();
$sql_str = '';
for ($i = 0; $i < $count; $i++)
{
$sql_arr[] = ("('', $i)");
}
$sql_str = implode(',', $sql_arr);
$sql .= $sql_str;
$stmt = $dbh->prepare($sql);
$stmt->execute();
$dbh->commit();
} catch(Exception $e) {
$dbh->rollBack();
echo $e->getMessage() . '<br>';
}
$end = microtime(true) * 1000;
echo 'excuted : ' , ($end - $begin) , ' ms';
上面这段代码的运行结果如下:
1、excuted : 99.005859375 ms
2、excuted : 103.00610351562 ms
3、excuted : 68.00390625 ms
平均:90.00528971354 ms
##分析 可以看出,在第二段代码中,使用了批量插入,此时的效率比第一段提高了84%。原因如下:
因此,在第二段代码中,通过合并SQL语句来实现减少SQL语句解析的次数以及PHP与MySQL连接的次数来达到减少网络传输IO的开销。
注意: 1、SQL语句是有长度限制的,因此,在进行SQL语句合并时务必不能超过SQL长度限制,通过设置max_allowed_packet可以修改,默认是1M,测试时修改为8M。
总结
在进行对数据库的批量操作(如:插入、更新、修改)时,应当尽可能将SQL语句合并后再执行而不是在循环中依次执行。
关于“PHP中进行基础数据库操作怎样优化”的内容今天就到这,感谢各位的阅读,大家可以动手实际看看,对大家加深理解更有帮助哦。如果想了解更多相关内容的文章,关注我们,群英网络小编每天都会为大家更新不同的知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
今天小编就为大家分享一篇关于PHP xpath()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
这篇文章主要介绍了PHP简单实现图片格式转换(jpg转png,gif转png等),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
生成器最大的优势就是简单,和实现Iterator的类相比有着更少的样板代码,并且代码的可读性也更强.例如,下面的函数和类是等价的:<?phpfunctiongetLinesFromFile($fi...
PHP抽奖算法如何理解,并实现一个抽奖功能?小编通过实际的案例向大家展示了操作过程,简单易懂,有需要的朋友可以参考了解看看,那么接下来就跟随小编的思路来往下学习吧,希望对大家学习或工作能有帮助。
在本篇文章里小编给大家整理的是一篇关于php实现自运行的实例详解内容,有兴趣的朋友们可以学习参考下。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008