PDO - 与手动执行相比,特定查询速度极慢

问题描述 投票:5回答:1

我遇到了一个特定查询的查询执行速度极慢(如下所示)。

奇怪的是,当手动运行查询(使用phpMyAdmin)时,只需要一秒钟就可以完成,而使用PDO从PHP运行它需要大约10分钟!

其他查询正常执行(PDO和phpMyAdmin之间的持续时间相等)。

技术细节:

  • 我正在使用Google App Engine和Cloud SQL。
  • 运行PHP5.5
  • 执行php代码的app引擎实例不忙。
  • 查询结果大约有10,000行

我正在运行的查询:

SELECT s.saleID,s.year,s.kilometrage,s.hand,s.price,s.pictures,u.platform,s.date,
   (SELECT AVG(price) FROM sales s2 WHERE s2.carID = s.carID AND s2.year = s.year HAVING COUNT(s2.saleID)>5) AS avgPrice
   FROM sales s JOIN users u ON u.ID = s.sellerID LEFT JOIN sold so ON s.saleID = so.saleID WHERE so.saleID IS NULL

关于这个问题的任何提示?它与索引无关,因为查询在phpMyAdmin下运行得非常好。

Edit

如果有人也有这个 - 似乎PMA在查询的分页上添加了一个隐含的LIMIT,这使得在某些情况下一切运行得更快。

php mysql pdo
1个回答
1
投票

尝试在字段列表中编写没有子查询的查询。像这样的东西:

SELECT s.saleID, s.year, s.kilometrage, s.hand, 
   s.price, s.pictures, u.platform, s.date,
   t.avgPrice
FROM sales s 
JOIN users u ON u.ID = s.sellerID 
LEFT JOIN sold so ON s.saleID = so.saleID 
LEFT JOIN (
    SELECT AVG(s2.price) as avgPrice, s2.carID, s2.year
    FROM sales s2 
    GROUP BY s2.carID, s2.year
    HAVING COUNT(s2.saleID) > 5
) t ON t.carID = s.carID AND t.year = s2.year
WHERE so.saleID IS NULL
© www.soinside.com 2019 - 2024. All rights reserved.