哪一个在PHP中是最快的?MySQL或MySQLi?
我想知道有没有人有这种二分法的第一手经验。 一些博客说mysql的扩展比mysqli快。 这是真的?
而我只是在问速度。 我知道mysqli具有旧版本中不存在的function。
在我见过的大多数基准testing中,MySQL扩展比MySQLi稍微快一点。 然而,这个差别非常小,所以这可能不是您决定两者之间的标准。
其他因素使得mysql和mysqli之间的性能差异缩小。 使用mod_php或FastCGI,像APC这样的字节码caching,或者明智地使用数据caching来减less数据库命中,对于MySQL脚本的整体性能来说,比selectMySQL扩展更有利。
不要一分钱一分钱一分货! 🙂
“这取决于。”
例如, PHP MySQL与MySQLi数据库访问指标以及随后的评论指出了两种方式的论点。
如果你有一个成熟的数据库和代码库,做一些testing,看看你的系统中有什么作用。 如果没有,请不要担心过早的优化。
见http://php.net/manual/en/mysqlinfo.api.choosing.php
所有三个扩展的总体性能被认为是大致相同的。 尽pipe扩展的性能仅占PHP Web请求总运行时间的一小部分。 影响通常低至0.1%。
也许,这可能是做出正确select的原因:: 杀死PHP MySQL扩展的阴谋
“是的,你读得对,最近,Phillip Olson向PHP内部邮件列表发送了一个build议,要求在未来的PHP版本中删除原来的PHP MySQL扩展。
关于PHP编程语言,MySQL是旧的数据库驱动程序,MySQLi是改进的驱动程序。 MySQLi利用了MySQL 5的新特性。
从php.net网站取得的MySQLi的特点:
- 面向对象的接口
- 支持准备好的陈述
- 支持多个语句
- 支持交易
- 增强的debuggingfunction
- embedded式服务器支持
根据所有谷歌关于ceejayoz链接的基准testing结果,在所有基准testing中,MySQL看起来至less比MySQLi略快。 我build议阅读结果的细节,但只是觉得我会发布的东西,直接回答这个问题,颠覆ceejayoz的答案。
PHP文档比较了mysql,mysqli和PDO 。 我知道你只问速度,但其他人可能会觉得这很有用。 它讨论了选项之间的function差异。
除非毫秒重要,否则不要担心。 当然,如果你不需要mysqli提供的额外function,那么就坚持使用久经考验的mysql。
<?php $start = microtime(); $c = new mysqli('localhost', 'username', 'userpass', 'username_dbname'); $c -> select_db('username_dbname'); $q = $c -> query("SELECT * FROM example"); while ($r = $q -> fetch_array(MYSQLI_ASSOC)) { echo $r['col1'] . "<br/>\n"; } $me = $c -> query("SELECT col1 FROM example WHERE id='11'") -> fetch_array(MYSQLI_ASSOC); echo $me['col1']; echo (microtime() - $start); ?>
为什么在使用mysqli oop的时候,使用mysql或者mysqli的程序风格来使用这个脚本会有一点点的提升呢? 当testing上面的脚本时,我得到0.0009秒比使用其他2更多。当使用mysql或mysqli程序,我加载脚本20x在每个不同的风格和两个总是高于.001。 我加载上面的脚本20倍,我得到低于.001 5倍。
MySQLi比MySQL有两个基本的优势。 准备好的语句是避免SQL注入攻击的好方法。 其次,MySQL(或mariaDB)将尽最大努力优化准备好的语句,因此您有可能在那里优化速度。 使数据库开心的速度将大大超过MySQL和MySQLi之间的微小差异。
如果你用语句喂食,你自己就像SELECT * FROM users WHERE ID=$user_id
把数据库视为一个唯一的语句,每个新的值都是$user_id
。 但是一个准备好的语句SELECT * FROM users WHERE ID=?
有更好的机会进行数据库的优化/caching。
但是,现在MySQL 正式被弃用,所以比较是相当有限的。 从马的口中:
在PHP 5.5.x中弃用的function
ext / mysql弃用
原来的MySQL扩展现在已经被弃用,并且在连接到数据库时会产生E_DEPRECATED
错误。 而是使用MySQLi或PDO_MySQL扩展。