哪个在PHP-MySQL或MySQLi中最快?

时间:2008-10-05 02:53:45

标签: php mysql mysqli

我想知道是否有人对这种二分法有任何第一手经验。一些博客称mysql扩展速度比mysqli快。这是真的吗?

我只是询问速度。我知道mysqli具有旧版扩展中不存在的功能。

10 个答案:

答案 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 扩展程序。