56

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

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

4

10 回答 10

88

在我见过的大多数基准测试中,MySQL 扩展比 MySQLi 快得多。然而,差异是如此之小,以至于这可能不应该成为您在两者之间做出决定的标准。

其他因素使 mysql 和 mysqli 之间的性能差异相形见绌。使用 mod_php 或 FastCGI、像 APC 这样的字节码缓存,或者明智地使用数据缓存来减少数据库命中,比选择 MySQL 扩展对 PHP 脚本的整体性能更有好处。

不要一分钱一分货,一分钱一分货!:-)

于 2008-10-05T03:47:53.593 回答
10

“这取决于。”

例如,PHP MySQL vs MySQLi Database Access Metrics和随后的评论指出了两种方式的论点。

如果你有一个成熟的数据库和代码库,做一些测试,看看你的系统有什么用。如果没有,请停止担心过早的优化。

于 2009-12-29T15:28:33.917 回答
6

http://php.net/manual/en/mysqlinfo.api.choosing.php

所有三个扩展的整体性能被认为是大致相同的。尽管扩展的性能只占 PHP Web 请求总运行时间的一小部分。通常,影响低至 0.1%。

于 2012-01-17T08:33:32.787 回答
3

PHP 文档对 mysql、mysqli 和 PDO 进行了很好的比较。我知道您只询问了速度,但其他人可能会觉得这很有用。它讨论了选项之间的功能差异。

于 2009-04-08T18:46:24.337 回答
3

也许,这可能是做出正确选择的理由 :: The Plot to Kill PHP MySQL Extension

“是的,你没看错。最近,Phillip Olson 向 PHP 内部邮件列表发送了一份提议,在未来的 PHP 版本中取消原有的 PHP MySQL 扩展。”

于 2011-07-15T18:04:25.643 回答
3

根据ceejayoz链接的所有 Google 基准测试结果,在所有基准测试中,MySQL 似乎至少比 MySQLi 快一点。我确实建议阅读结果以了解详细信息,但只是想我会发布一些直接回答问题并提高 ceejayoz 答案的内容。

于 2008-10-05T03:08:27.137 回答
3

相对于 PHP 编程语言,MySQL 是旧的数据库驱动程序,而 MySQLi 是改进的驱动程序。MySQLi 利用了 MySQL 5 的新特性。

MySQLi 的功能取自 php.net 站点:

  • 面向对象的接口
  • 支持准备好的报表
  • 支持多个语句
  • 交易支持
  • 增强的调试功能
  • 嵌入式服务器支持
于 2011-12-28T07:24:29.487 回答
1

除非毫秒很重要,否则不要担心。当然,如果您不需要 mysqli 提供的额外功能,那么只需坚持使用久经考验的 mysql。

于 2010-02-25T16:08:22.047 回答
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 程序风格的这个脚本会略微提高速度?测试上述脚本时,我得到的时间比使用其他脚本时要多 0.0009 秒。当使用 mysql 或 mysqli 程序时,我以每种不同的样式加载脚本 20 倍,并且两者始终高于 0.001。我将上述脚本加载 20 倍,但低于 0.001 5 倍。

于 2013-12-24T20:11:56.753 回答
-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在连接到数据库时会产生错误。相反,使用MySQLiPDO_MySQL扩展。

于 2013-06-22T19:33:36.497 回答