我想知道是否有人对这种二分法有任何第一手经验。一些博客称mysql扩展速度比mysqli快。这是真的吗?
我只是询问速度。我知道mysqli具有旧版扩展中不存在的功能。
答案 0 :(得分:88)
在我见过的大多数基准测试中,MySQL扩展速度比MySQLi快一点。然而,差异是如此轻微,这可能不是你在两者之间做出决定的标准。
其他因素使mysql和mysqli之间的性能差异相形见绌。使用mod_php或FastCGI,像APC这样的字节码缓存,或明智地使用数据缓存来减少数据库命中,对于PHP脚本的整体性能而言远比选择MySQL扩展更有利。
不要吝啬聪明,捣蛋! : - )
答案 1 :(得分:10)
“这取决于。”
例如,PHP MySQL vs MySQLi Database Access Metrics以及随后的评论都指出了两种方式。
如果您有成熟的数据库和代码库,请进行一些测试,看看系统中有什么用。如果没有,请不要担心过早优化。
答案 2 :(得分:6)
请参阅http://php.net/manual/en/mysqlinfo.api.choosing.php
所有三个扩展的整体性能被认为大致相同。虽然扩展的性能只占PHP Web请求总运行时间的一小部分。通常,影响低至0.1%。
答案 3 :(得分:4)
也许,这可能是做出正确选择的理由:: The Plot to Kill PHP MySQL Extension
“是的,你读得对。最近,Phillip Olson向PHP内部邮件列表发送了一份建议,要求在未来的PHP版本中删除原来的PHP MySQL扩展。”
答案 4 :(得分:4)
关于PHP编程语言,MySQL是旧的数据库驱动程序,而MySQLi是改进的驱动程序。 MySQLi利用了MySQL 5的新功能。
MySQLi的功能取自php.net网站:
答案 5 :(得分:3)
根据ceejayoz链接的基准测试的所有谷歌搜索结果,看起来MySQL在所有基准测试中至少比MySQLi略快。我建议阅读结果以获取详细信息,但我想发布一些直接回答问题的内容,并提出了ceejayoz的回答。
答案 6 :(得分:3)
PHP文档有一个很好的comparison of mysql, mysqli, and PDO。我知道你只询问速度,但其他人可能会觉得这很有用。它讨论了选项之间的功能差异。
答案 7 :(得分:2)
除非毫秒重要,否则不要担心。当然,如果你不需要mysqli提供的额外功能,那么只需坚持使用经过试验和测试的mysql。
答案 8 :(得分:0)
<?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程序样式的脚本会有轻微的速度提升?在测试上面的脚本时,我比使用其他脚本的时间长得多.0009秒。当使用mysql或mysqli程序时,我在每个不同的样式中加载了20x的脚本,并且两个总是高于.001。我加载上面的脚本20x,我得到低于.001 5x。
答案 9 :(得分:-2)
MySQLi 比 MySQL 有两个基本优势;准备好的语句是避免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扩展,并且在连接到数据库时会产生E_DEPRECATED
错误。相反,请使用 MySQLi 或 PDO_MySQL 扩展程序。