作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含三个联接的查询,它返回几百行。当我从命令行运行它时,它始终需要 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/
背景: 我正在使用的 Jenkins 插件是: Bitbucket 插件 Bitbucket Pullrequest Builder 插件 我工作的公司正在使用 Jira + Bitbucket。 我
我是一名优秀的程序员,十分优秀!