我有一个包含三个连接的查询,它返回几百行。当我从命令行运行它时,它始终需要8到9秒才能完成。但是,当我通过PDO运行它时,通常需要大约2分40秒才能完成。当我运行"显示进程列表"当它运行时,我发现大部分时间花在了状态"复制到tmp table",这似乎只有在我通过PDO运行时才会发生。
总结:
<? $pdo->prepare($query)->execute(); ?> => takes 2 minutes 40
$ echo $query | mysql; => takes 8 seconds
这是为什么?它的查询完全相同;我真的在php和命令行之间复制和粘贴它。那么,当pdo这么做的时候为什么要花这么长时间呢?更重要的是,如何在不更改查询的情况下更快地执行执行?
答案 0 :(得分:0)
通常,通过PDO运行查询比本机运行查询要慢。这是因为据我所知,你使用PDO会经历三层(在PDO下你得到了ODBC)。因此,与本机相比,PDO较慢是正常的。
由于您在相同查询上比较时间,我认为您有很多行。我认为PDO很难以与本机可以提供的速度相同的速度消耗大量行,从而减慢了流程。
如果你有任何机会将其与不使用索引相结合,无论什么原因,时间差异会更大。在这方面,您可以检查两个连接的字符集是否相同。
答案 1 :(得分:0)
使用bindValue()方法指定确切的参数类型(整数,字符串)。否则Mysql可能不会使用索引。
类似于question