PHP通过mysqli与pdo插入数据到mysql数据库速度对比测试

admin 2023-11-23 453 阅读 0评论

本文通过使用PHP循环插入1000次随机10位数字到mysql数据库来分析在php中使用mysqli和pdo的性能表现情况,来分析在php中使用pdo方式还是使用mysqli的方式更优秀。分析对比逻辑:循环1000次,每次生成一个10位数字,成功插入数据库以后,统计处理时间。每一种方式个执行5次,然后通过5次所消耗的时间来求平均值,最后以平均值大小来判断执行速度,速度快者性能更优秀。

一、测试逻辑代码:

PHP

<?php
// 设置数据库连接参数
if ($_GET != NULL) {
   $id = $_GET['id'];
} else {
   $id = 1;
}
   $db_host = '127.0.0.1';
   $db_user = 'test';
   $db_pass = 'test';
   $db_name = 'test';
// PDO方式
if ($id == 1) {
   try {
       // 创建数据库连接
       $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
       // 设置 PDO 错误模式,以抛出异常
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
       
       // 开始时间
       $start_time = microtime(true);
       for ($i = 0; $i < 1000; $i++) {
           $str = rand(10000000000, 9999999999);
           $sql = "INSERT INTO test (test) VALUES (:test)";
           $stmt = $pdo->prepare($sql);
           $stmt->bindParam(':test', $str);
           $stmt->execute();  // 执行插入操作
       }
       // 结束时间
       $end_time = microtime(true);
       // 使用的时间
       $execution_time = $end_time - $start_time;
       $execution_time = number_format($execution_time, 3); // 只保留三位小数
       echo "PDO方式循环插入1000次随机10位数字,耗时:" . $execution_time . '秒';
   } catch (PDOException $e) {
       // 如果连接过程中发生错误,则捕获异常并输出错误信息
       echo "数据库连接失败: " . $e->getMessage();
   }
} elseif ($id == 2) {
   // mysqli方式
   $conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
   if ($conn->connect_error) {
       die("Connection failed: " . $conn->connect_error);
   }
   $start_time_mysqli = microtime(true);
   for ($i = 0; $i < 1000; $i++) {
       $str = rand(10000000000, 9999999999);
       $sql = "INSERT INTO test (test) VALUES ('$str')";
       $conn->query($sql);
   }
   $end_time_mysqli = microtime(true);
   $execution_time_mysqli = $end_time_mysqli - $start_time_mysqli;
   $execution_time_mysqli = number_format($execution_time_mysqli, 3); // 只保留三位小数
   echo "Mysqli方式循环插入1000次随机10位数字,耗时:" . $execution_time_mysqli . '秒';
   $conn->close();
} else {
   // 其他操作
}
?>

二、运行测试代码

测试环境:

操作系统:CentOS Stream 8 x86_64(Py3.7.9)

PHP版本:PHP8.1

Mysql版本:MySQL 5.7.41

运行以上测试代码,然后记录每次运行时间:

运行次数12345
PDO方式:6.5836.3136.8586.2546.142
Mysqli方式:6.3226.1716.6916.2206.307


PDO方式执行前:


使用PDO方式连续5次运行截图:


PDO方式运行代码结束后清空数据表,使用mysqli方式连续运行5次:


三、计算对比

PDO方式平均时间:6.43秒

Mysqli方式平均时间:6.3422秒

很诧异,在PHP中使用PDO方式处理同样的数据居然比使用Mysqli要稍微慢一点。本次测试Mysqli方式以微弱的优势胜出。不过本次测试只是单纯的数据插入测试,并不全面,测试环境也并不严谨、采样数据也不够丰富。

结论:在php中不管使用PDO方式还是Mysqli方式来处理mysql数据,性能表现不相上下,至少在本次测试插入数据的时间上相差不大。所以,对于我们普通站长来说,使用哪一种方式来处理mysql数据都是没有问题的。相对来说,使用PDO方式在更安全性上会更有优势一点。

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 453人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表