提问人:David 提问时间:10/5/2008 最后编辑:nickfDavid 更新时间:1/23/2016 访问量:60933
PHP-MySQL和MySQLi哪个最快?
Which is fastest in PHP- MySQL or MySQLi?
问:
我想知道是否有人对这种二分法有任何第一手经验。一些博客说 mysql 扩展比 mysqli 更快。这是真的吗?
我只问速度。我知道 mysqli 具有旧扩展中不存在的功能。
答:
根据 ceejayoz 链接的所有 Google 基准测试结果,在所有基准测试中,MySQL 至少比 MySQLi 略快。我确实建议阅读结果以了解详细信息,但只是想我会发布一些直接回答问题并提升 ceejayoz 答案的内容。
在我看到的大多数基准测试中,MySQL 扩展比 MySQLi 快得多。然而,差异是如此之小,以至于这可能不应该成为您在两者之间做出决定的标准。
其他因素使 mysql 和 mysqli 之间的性能差异相形见绌。使用 mod_php 或 FastCGI、像 APC 这样的字节码缓存,或者明智地使用数据缓存来减少数据库命中,对 PHP 脚本的整体性能比选择 MySQL 扩展更有利。
不要一分钱一分货,一分钱一分货!:-)
评论
PHP 文档对 mysql、mysqli 和 PDO 进行了很好的比较。我知道你只问了速度,但其他人可能会觉得这很有用。它讨论了选项之间的功能差异。
“这要看情况。”
例如,PHP MySQL vs MySQLi Database Access Metrics 和随后的注释都指出了两种方式的参数。
如果您有成熟的数据库和代码库,请进行一些测试,看看哪些在您的系统中有效。如果没有,请不要再担心过早的优化。
除非毫秒很重要,否则不用担心。当然,如果您不需要 mysqli 提供的额外功能,那么只需坚持使用久经考验的 mysql。
也许,这可能是做出正确选择的理由:: 剧情 杀死 PHP MySQL 扩展
“是的,你没看错。最近,Phillip Olson 向 PHP 内部邮件列表发送了一份提案,要求在未来的 PHP 版本中取消原来的 PHP MySQL 扩展。"
评论
关于PHP编程语言,MySQL是旧的数据库驱动程序,MySQLi是改进的驱动程序。MySQLi 利用了 MySQL 5 的新功能。
MySQLi的功能取自 php.net 站点:
- 面向对象的界面
- 支持预准备语句
- 支持多个语句
- 支持交易
- 增强的调试功能
- 嵌入式服务器支持
评论
查看 http://php.net/manual/en/mysqlinfo.api.choosing.php
所有三个扩展的整体性能被认为大致相同。尽管扩展的性能仅占 PHP Web 请求总运行时间的一小部分。通常,影响低至0.1%。
与MySQL相比,MySQLi有两个基本优势;准备好的语句是避免 SQL 注入攻击的好方法。其次,MySQL(或mariaDB)将尽最大努力优化准备好的语句,因此您有可能在那里进行速度优化。使数据库满意而带来的速度提升将大大超过MySQL和MySQLi之间的微小差异。
如果你在语句中输入,你自己混在一起,就像数据库会把它当作一个唯一的语句,每个新值都是 。但是,准备好的语句更有可能由数据库执行一些优化/缓存。SELECT * FROM users WHERE ID=$user_id
$user_id
SELECT * FROM users WHERE ID=?
但比较是相当没有意义的,因为MySQL现在已被正式弃用。从马的嘴里:
PHP 5.5.x 中不推荐使用的功能
ext/mysql 弃用
原来的MySQL扩展现在已被弃用,并且在连接到数据库时会生成错误。请改用 MySQLi 或 PDO_MySQL 扩展。E_DEPRECATED
评论
"SELECT * FROM users WHERE ID IN ($user_id, $user_id2)"
<?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 过程样式一起使用会略有提高?在测试上述脚本时,我得到的 0.0009 秒始终比使用其他 2 个脚本时多。当使用 mysql 或 mysqli 过程时,我以每种不同的样式加载了 20 倍的脚本,并且两者始终高于 .001。我加载了上面的脚本 20 倍,我得到低于 .001 5 倍。
评论