【问题标题】:MySQL performance again MySQLiMySQL 性能再次 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 的勇敢新世界毫无意义,也没有任何基准
  • @FreshPrinceOfSO 它不是

标签: php mysql mysqli


【解决方案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 扩展从那时起就确立了其至高无上的地位。
猜你喜欢
  • 2012-07-11
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2021-12-10
  • 2011-12-20
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多