2015-02-10 31 views
0

我有三个连接,返回几百行的查询。当我从命令行运行它时,它始终需要8到9秒才能完成。但是,当我通过PDO运行它时,通常需要大约2分40秒才能完成。当我在运行“show processlist”时运行时,我发现大部分时间都花在了“复制到tmp表”的状态,这似乎只发生在我通过PDO运行时发生的情况。为什么mysql只在与PDO一起使用时创建临时表?

总结:

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

这是为什么?这完全是同一个查询;我真的在PHP和命令行之间复制和粘贴它。那么,为什么pdo要花费更多的时间呢?更重要的是,如何在不改变查询的情况下更快地执行执行?

+0

你能显示查询吗? – BogdanM 2015-02-10 10:18:24

+2

我们需要查询,您是否尝试了解由PDO运行的查询和控制台中的查询? – Salketer 2015-02-10 10:25:21

+0

对查询进行解释并粘贴。 – Seti 2015-02-10 10:44:49

回答

0

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

由于您在相同的查询上比较时间,我认为您有很多行。我会认为,PDO无法以与您的本地交付速度相同的速度消耗大量行,从而减慢了过程速度。

如果您有任何机会将此与不使用索引的时间差异更大的原因结合使用。在这方面,你可以检查两个连接的字符集是否相同。

0

使用bindValue()方法指定确切的参数类型(整数,字符串)。否则Mysql可能不会使用索引。

看起来和question差不多