我想知道是否有人对这种二分法有第一手经验。 一些博客说,mysql扩展比mysqli更快。这是真的吗?
而我只是询问速度问题。 我知道mysqli具有旧扩展中没有的功能。
在我看到的大多数基准测试中,MySQL扩展比MySQLi扩展稍微快一点。然而,差别非常微小,这可能不应该是你在两者之间进行选择时的决定标准。
除了mysql和mysqli之间性能差异之外,其他因素会使差异微不足道。对于PHP脚本的整体性能,使用mod_php或FastCGI、像APC这样的字节码缓存,或者明智地使用数据缓存以减少对数据库的访问,要比选择MySQL扩展更有益。
不要眼前小利而忘了长远大益! :-)
这要看具体情况。
例如,PHP MySQL与MySQLi数据库访问度量及其后续评论都提出了双方的论点。
如果您拥有成熟的数据库和代码库,请进行一些测试,看看在您的系统中哪种方法更有效。如果没有,请不要担心过早地进行优化。
"请参见http://php.net/manual/en/mysqlinfo.api.choosing.php
总体而言,所有三个扩展的性能被认为大致相同。虽然扩展的性能只占PHP web请求总运行时间的一小部分。通常情况下,影响仅为0.1%。
也许,这可以成为做出正确选择的一个原因:计划杀死PHP MySQL扩展
“是的,你没有看错。最近,菲利普·奥尔森(Phillip Olson)向PHP内部邮件列表提交了一份提案,以在未来的PHP版本中取消原始的PHP MySQL扩展。”
关于PHP编程语言,MySQL是旧的数据库驱动程序,而MySQLi是改进的驱动程序。MySQLi利用了MySQL 5的新功能。
从php.net网站获取的MySQLi特性:
除非毫秒很重要,否则不用担心。如果您不需要mysqli提供的额外功能,那么就坚持使用经过验证的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相比于MySQL有两个基本优点:准备好的语句是避免SQL注入攻击的好方法。其次,MySQL(或mariaDB)将尽力优化准备好的语句,因此您可以在那里获得速度优化的潜力。使数据库满意从而提高速度,远远超过MySQL和MySQLi之间微小的差异。
如果您输入自己拼凑的语句,例如SELECT * FROM users WHERE ID=$user_id
,则数据库将将其视为每个新值$user_id
的唯一语句。但是,准备好的语句SELECT * FROM users WHERE ID=?
具有更好的优化/缓存机会。
但是,比较MySQL和MySQLi实际上没有太大意义,因为MySQL现在已经官方弃用了。引用原话:
PHP 5.5.x中的弃用功能
ext/mysql deprecation
原始的MySQL扩展现已被弃用,并且在连接到数据库时将生成E_DEPRECATED
错误。请改用MySQLi或PDO_MySQL扩展。
"SELECT * FROM users WHERE ID IN ($user_id, $user_id2)"
,这样可以使其运行速度更快。 - Your Common Sense