php - 为什么 mysql 在与 PDO 一起使用时只创建临时表?

标签 php mysql performance pdo command-line-interface

我有一个包含三个联接的查询,它返回几百行。当我从命令行运行它时,它始终需要 8 到 9 秒才能完成。然而,当我通过 PDO 运行它时,通常需要大约 2 分 40 秒才能完成。当我在运行时运行“show processlist”时,我发现大部分时间都花在“复制到临时表”状态,这似乎只在我通过 PDO 运行它时才会发生。

总结一下:

<? $pdo->prepare($query)->execute(); ?> => takes 2 minutes 40
$ echo $query | mysql; => takes 8 seconds

这是为什么呢?这是完全相同的查询;我实际上是在 php 和命令行之间复制并粘贴它。那么,为什么 pdo 执行时要花这么长时间呢?更重要的是,如何在不更改查询的情况下使执行速度更快?

最佳答案

一般来说,通过 PDO 运行查询会比本地运行查询慢。这是因为,据我所知,通过使用 PDO,您将经历三个层(在 PDO 下,您获得了 ODBC)。因此,与 native 相比,PDO 速度较慢是正常的。

由于您正在比较相同查询的时间,我认为您有很多行。我认为 PDO 难以以与 native 传送行相同的速度消耗大量行,从而减慢了进程。

如果出于某种原因将其与不使用索引结合起来,那么时间差异会更大。此时可以检查两个连接的字符集是否相同。

关于php - 为什么 mysql 在与 PDO 一起使用时只创建临时表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28429074/

相关文章:

php - MySQL:如果表中不存在变量,如何回显文本?

mysql - 用于从同一列输出两个值的 SQL 语句,如何做到最好?

java - 在上传到 Google App Engine 之前如何打包我的类(class)

即使正在使用索引,在极少数情况下 MySQL 查询也会变慢

php - 您的 SQL 语法有错误;检查手册以了解在 'AND ` user_id` = 1' 附近使用的正确语法

mysql - #1064 在 WordPress 中删除重复行时出错

php - codeigniter 中的 MLM 树结构

python - Python 的 "built-in method acquire"是什么?我怎样才能加快速度?

PHP XML DOM 未捕获异常 'DOMException',消息为 'Wrong Document Error'

javascript foreach select 循环选择值