首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqlnd明显慢于使用PDO的libmysql

mysqlnd明显慢于使用PDO的libmysql
EN

Stack Overflow用户
提问于 2015-06-17 14:40:02
回答 1查看 951关注 0票数 3

我只是切换到mysqlnd,以便能够使用http://php.net/manual/en/book.mysqlnd-ms.php,但是与libmysql相比,我看到了一些严重的性能下降。

NewRewlic显示,在切换到mysqlnd https://db.tt/68r9RfhJ之后,在PHP上花费了更多的100 in

我创建了一个基准来重现这个问题,它非常简单:

代码语言:javascript
复制
$dbh = new PDO("mysql:host=$host; dbname=$dbname;", $user, $pass);

for ($i = 0; $i < 1000; $i++) {
    $sth = $dbh->prepare("SELECT * FROM Orders LIMIT 100");
    $sth->execute();

    $result = $sth->fetchAll(PDO::FETCH_ASSOC);
}

执行时间:

  • libmysql -~2秒
  • mysqlnd -~3秒(多50%)

版本信息:

  • PHP版本:PHP5.5.9-1 ubuntu4.9
  • 客户端API版本=> mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $
  • 客户端API库版本=> mysqlnd 5.0.11-dev - 20120503 - $Id: bf9ad53b11c9a57efdb1057292d73b928b8c5c77 $

有谁能解释一下这背后的原因以及如何解决呢?

  1. PDO主要表现为慢度。
  2. mysqli似乎并没有受到多大影响。
  3. 由于使用原则,我不能转到mysqli。
  4. 追赶libmysql速度的唯一方法是禁用对MySQL (setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false))的查询的缓冲,这在生产中是很难做到的,这是因为特性的变化和可能的副作用。
EN

回答 1

Stack Overflow用户

发布于 2015-06-17 14:51:28

mysqlnd并不慢。只是对记忆更有效。PHP不是通过复制所有数据从mysql获取结果,而是成为与mysql对话并将数据存储在内存中的相同进程。因此,最终您将使用一半的内存,但增加的计算成本可能是因为必须在PHP进程中分配该内存。您可能只是在新版本中看到从mysql到PHP的转变。我很怀疑你在这方面有什么值得关注的地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30894833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档