牛骨文教育服务平台(让学习变的简单)
博文笔记

PDO与原生方式对数据库连接插入操作效率对比

创建时间:2017-04-22 投稿人: 浏览次数:1311

众所周知,php中常见的两种连接数据库的方式有PDO连接和原生的mysql连接(包括mysqli方式)。对于很多初学者来说很想搞明白二者在效率方面的区别,下面就让我们来对比一下。
首先对比二者在创建连接上的区别:
注意:在代码开头写上
set_time_limit(0);//这一句很重要,表示php响应时间没有限制,php默认响应时间为30秒,如果超过就返回错误。
错误信息:Fatal error: Maximum execution time of 30 seconds exceeded in D:phpStudyWWWMoocStudyPDOStudy estpdoconn.php on line 11

set_time_limit(0);//这一句很重要,php默认响应时间为30秒,如果超过就返回错误。
$begiontime=microtime(true);
for($i=0;$i<100;$i++) {
    $pdo = new PDO("mysql:host=localhost;dbname=myphp", "root", "123456");
}
$endtime=microtime(true);
$times=$endtime-$begiontime;

$btime=microtime(true);
for($j=0;$j<100;$j++) {
    $conn = mysql_connect("localhost", "root", "123456");
    mysql_select_db("myphp");
}
$etime=microtime(true);
$times2=$etime-$btime;

echo $times;
echo "<br/>";
echo $times2;

执行的结果:
101.23779082298
1.0220580101013
由此可见,原生连接方式效率是PDO连接方式的100倍。

接下来我们来对比二者在查询方面的效率:
具体代码:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017-4-22
 * Time: 18:42
 */
set_time_limit(0);
$begiontime=microtime(true);
$pdo = new PDO("mysql:host=localhost;dbname=myphp", "root", "123456");
$sql="insert into bank values(?,?,?)";
$stmt = $pdo->prepare($sql);
$name="test";
$sum=1000;
for($i=0;$i<1000;$i++) {
    $stmt->bindParam(1,$i);
    $stmt->bindParam(2, $name);
    $stmt->bindParam(3, $sum);
    $stmt->execute();
}
$endtime=microtime(true);
$times=$endtime-$begiontime;
$pdo=null;

$btime=microtime(true);
$conn = mysql_connect("localhost", "root", "123456");
mysql_select_db("myphp");
for($i=0;$i<1000;$i++) {
    $conn->query("insert into bank values($i,"wang",2000)");
}
mysql_close();
$etime=microtime(true);
$times2=$etime-$btime;

echo $times;
echo "<br/>";
echo $times2;

执行结果:
33.927941083908
35.266016960144
由此可见,二者的差别不是太大。

最后我们来对比二者在查询方面的差别:

set_time_limit(0);
$begiontime=microtime(true);
$pdo = new PDO("mysql:host=localhost;dbname=myphp", "root", "123456");
$sql="select * from bank";
$stmt = $pdo->query($sql);
$endtime=microtime(true);
$times=$endtime-$begiontime;
$pdo=null;

$btime=microtime(true);
$conn = mysql_connect("localhost", "root", "123456");
mysql_select_db("myphp",$conn);
mysql_query("select * from bank");
mysql_close();
$etime=microtime(true);
$times2=$etime-$btime;

echo $times;
echo "<br/>";
echo $times2;

结果(6000行数据):
1.0480599403381
1.0350589752197

可见在查询方面二者并没有太大的区别。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。