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 规则,优化应该在代码之前就关注您的查询和数据库结构。
尽管如此,几年前我在进行切换时确实运行了自己的简单基准测试。我发现mysqli
比mysql
更高效。使用prepared statements时更是如此。
正如您的常识所指出的,性能还很大程度上取决于您编写代码的方式。确保您了解库的区别以及使用哪些方法。
【讨论】:
这很公平,我想这只是我自己对数据库查询基准测试感兴趣的好奇心! @Pogrindis benchmarking this function与benchmarking db queries无关。 当然可以,但是我想知道使用这两种方法的相同表的查询时间会很有趣,出于轻微的好奇心。 我用相同的INSERT
和SELECT
查询查询同一张表,mysqli
的性能更高。
@FreshPrinceOfSO,这个问题已经有 5 年历史了。显然,mysqli
扩展从那时起就确立了其至高无上的地位。以上是关于MySQL 性能再次 MySQLi的主要内容,如果未能解决你的问题,请参考以下文章
mysqli_fetch_assoc() 性能 PHP5.4 与 PHP7.0