MySQL 性能再次 MySQLi

Posted

技术标签:

【中文标题】MySQL 性能再次 MySQLi【英文标题】:MySQL performance again MySQLi 【发布时间】:2013-07-13 11:56:42 【问题描述】:

我正在将旧代码从 mysql_ 升级到 mysqli,我发现自己正在编写一个通用的替代代码:

mysql_result();

我写的是:

function mysqli_result($res, $row, $field=0)  
$res->data_seek($row); 
$datarow = $res->fetch_array(); 
return $datarow[$field]; 
 

但我很好奇,有没有在不影响任何性能速度的情况下精确地对两者进行基准测试,如果是这样,最好的方法是什么?

【问题讨论】:

Mysql_result 是从 mysql 获取数据的最糟糕的方式。将其拖入 mysqi 的勇敢新世界毫无意义,也没有任何基准 Which is fastest in php- MySQL or MySQLi?的可能重复 @FreshPrinceOfSO 它不是 【参考方案1】:

MySQLi 是一种与同一数据库交互的“改进”方式,除了支持之外,它还具有许多内存和速度增强功能;

准备好的声明 多个语句 交易

MySQLi 也可以写成 OOP 风格和过程风格。

如果您向下滚动到MySQLi Overview 提供的页面底部,您将看到一个比较表。

如果您对基准测试感兴趣,我偶然发现了一个博客,您可能想看看 Blog - ioMeWeekly

【讨论】:

与许多其他“博客文章”一样,这篇文章实际上无法告诉您任何关于“速度差异”或此类基准的必要性。 旧的 mysql ext 可以处理预处理语句、多语句和事务。我不敢相信有这么多人在传播这个谣言 它提供了脚本,使读者能够测试自己。然后它会回答“在我的环境中对我来说更快吗?”。 很遗憾,你没有明白这一点。这个测试在意图上基本上是无用的,在实施上是错误的。在任何环境中。 使用 PDO 扩展它支持准备好的语句等,但是标准的 MySQL 扩展不支持。参考:php.net/manual/en/mysqlinfo.api.choosing.php【参考方案2】:

mysql_* 函数将是 deprecated in PHP 5.5。不建议编写新代码,因为它会在未来被删除。

话虽如此,对基准和性能的关注是无关紧要的。此外,遵循 80/20 规则,优化应该在代码之前就关注您的查询和数据库结构。

尽管如此,几年前我在进行切换时确实运行了自己的简单基准测试。我发现mysqlimysql 更高效。使用prepared statements时更是如此。

正如您的常识所指出的,性能还很大程度上取决于您编写代码的方式。确保您了解库的区别以及使用哪些方法。

【讨论】:

这很公平,我想这只是我自己对数据库查询基准测试感兴趣的好奇心! @Pogrindis benchmarking this function与benchmarking db queries无关。 当然可以,但是我想知道使用这两种方法的相同表的查询时间会很有趣,出于轻微的好奇心。 我用相同的INSERTSELECT 查询查询同一张表,mysqli 的性能更高。 @FreshPrinceOfSO,这个问题已经有 5 年历史了。显然,mysqli 扩展从那时起就确立了其至高无上的地位。

以上是关于MySQL 性能再次 MySQLi的主要内容,如果未能解决你的问题,请参考以下文章

mysqli_fetch_assoc() 性能 PHP5.4 与 PHP7.0

带有索引的 MySQL 表:许多插入/更新会影响性能吗?如果是,如何再次加快速度?

php使用mysqli连接Mysql,怎么使用永久连接

PDO和MySQLi , MySQL区别与选择?

PHP开发异步高性能的MySQL代理服务器

mysqlmysqliPDO一句话概括