当前位置:首页 > 网站建设 > 建站交流 > 正文内容

PDO,MYSQL,MYSQLI 性能哪个比较好

热淘网4年前 (2017-04-26)建站交流1388

 PDO,MYSQL,MYSQLI 性能哪个比较好?这里我们来简单进行下对比。

  普通的mysql连接肯定是会被抛弃的 因为每次都要防止sql注入的问题 而且相对来说比较慢。

  mysqli是在普通mysql的基础上做的一次优化,说实话很成功,预处理方式完全解决了sql注入的问题。但是唯一的不足点 就是只支持mysql数据库。当然,如果你要是不操作其他的数据库,这无疑是最好的选择。

  PDO则是最新出来的一种,连接方式兼容大部分数据库,也解决了sql注入。但是也有缺点,它只支持php5以上的版本(不过听说在未来的php6中只支持这种连接)。

  PDO统一所有数据库抽象层对象接口,mysqli只统一mysql的。简单说,PDO可以实现同样的代码对不同数据库的操作,例如你从mysql迁移到mssql,程序基本不需要改动。而mysqli简单理解未mysql的封装就好。

  在高负载的情况下,PDO开启长连接能够得到一个相对稳定的负载“值”。但是效率却不是最高的。 mysql最快。mysqli其次。只是mysql和mysqli在高并发、系统高负载的时候,其所承担的负载也是很可观的。PDO则不会。


在开始之前,说明一下我的环境:Apache用的2.4,MySQL版本5.7.16,php用的7.0版本.测试时,两种连接方式均采用面向对象的方式进行..数据库名称为test,以下是测试连接时的代码:
$startP = microtime(true); for ($i = 0; $i < 100; $i++) { $pdo = new PDO('mysql:host=localhost;dbname=test','root','136189'); } $endP = microtime(true); echo 'PDO耗时:'.($endP-$startP).'<br/>'; $startM = microtime(true); for ($i = 0; $i < 100; $i ++) { $mysqli = new mysqli('localhost','root','136189','test'); } $endM = microtime(true); echo 'mysqli耗时:'.($endM-$startM);

从代码可以看出,对每种连接方式都使用100这个量来测试,以下是运行结果(由于使用截图比较麻烦,我直接把运行结果复制过来了):

PDO耗时:0.63103604316711
mysqli耗时:0.61103487014771

什么,一次说明不了问题?好,那就再来一次!

PDO耗时:0.57503318786621
mysqli耗时:0.44002485275269

从这里可以看出,mysqli的连接速度是要快于pdo的.下面,再来看一下插入数据的速度对比,首先,创建插入的数据表,这个表非常简单,只有一个字段,以下是sql语句:

CREATE TABLE IF NOT EXISTS test(
    id INT UNSIGNED NOT NULL
)

进行插入记录测试时,每种方式各进行500次,由于我的机器比较老,执行该脚本的时候时间会大于30秒,而php默认的最长执行时间是30秒,超过30秒就会报错,所以要在代码开头加上一句代码,所有代码如下:

set_time_limit(100);
$startP = microtime(true);
$pdo = new PDO('mysql:host=localhost;dbname=test','root','136189');
$sql = "INSERT INTO test VALUES (?)";
$stmt = $pdo->prepare($sql);
$var1 = 1;
$stmt->bindParam(1,$var1);
for ($i = 0; $i < 500; $i++) {  
    $stmt->execute();
}
$endP = microtime(true);
echo 'PDO耗时:'.($endP-$startP).'<br/>';

$startM = microtime(true);
$mysqli = new mysqli('localhost','root','136189','test');
$sql = "INSERT INTO test VALUES (?)";
$mysqli_stmt = $mysqli->prepare($sql);
$var2 = 2;
$mysqli_stmt->bind_param('i',$var2);
for ($i = 0; $i < 500; $i ++) {
    $mysqli_stmt->execute();
}
$endM = microtime(true);
echo 'mysqli耗时:'.($endM-$startM);

和上面一样,我们还进行两次,结果如下:

PDO耗时:20.501173019409
mysqli耗时:18.282045841217
--------------------------------------------------
PDO耗时:22.438282966614
mysqli耗时:21.949255943298

可以看出,两者的速度差不多,这些数据仅供参考,实际应用中可以根据自己的需要来使用不同的操作对象,不过,如果数据库用的mysql的话,感觉还是用mysqli更好一些,毕竟,pdo还是有一定的复杂度的,对于有Java基础的小伙伴来说,pdo或许上手更快一些.最后,请原谅我不喜欢用中文标点,编程的时候切来切去真是太让人讨厌了,有没有同感的呢?

综合上面的测试结果得出最终结论:

mysql最慢,pod速度其次,mysqli最快

如果只使用mysql推荐用mysqli,如果使用非mysql推荐使用pdo

<p>扫描二维码推送至手机访问。</p><p>版权声明:本文由<strong>网站标题</strong>发布,如需转载请注明出处。</p>

本文链接:https://blog.retao5.com/jianzhan/1224.html

分享给朋友:

相关文章

修改服务器上传图片大小限制

修改服务器上传图片大小限制

1. 一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完.但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行.这就导致出现 无法打开网页的...

千万级的数据库提高查询效率攻略教程

千万级的数据库提高查询效率攻略教程

在一个千万级的数据库查寻中,如何提高查询效率?1)数据库设计方面: a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 b. 应尽量避免在...

新版Iconfont-阿里巴巴矢量图标库支持三种引用方式

新版Iconfont-阿里巴巴矢量图标库支持三种引用方式

下载代码然后将压缩包解压,代码包括demo的html和css文件、iconfont的css、js以及各种字体文件,demo是使用说明,iconfont文件是使用这个图标库所必须的文件,可根据使用的具体...

PHP Phpmailer 发送邮件

PHP Phpmailer 发送邮件

˂?phpinclude_once('phpmailer/class.phpmailer.php');$mail = new PHPMailer();//设置SMTP发邮件$mail-˃IsSMTP(...

HTML5开发工具HBuilder

HTML5开发工具HBuilder

官网:http://www.dcloud.io/hbuilderx.htmlHBuilderX,简称HX,是轻如编辑器、强如IDE的合体版本 轻巧10M的绿色发行包...

让IIS支持伪静态

让IIS支持伪静态

伪静态是什么? 伪静态就是:动态网页通过重写URL的方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面. 伪静态的生成的2种方式: 1.框架型伪静态...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。