我遇到特定查询的查询执行速度非常慢(写在下面)。
奇怪的是,当手动运行查询(使用 phpMyAdmin)时,只需一秒钟即可完成,而使用 PDO 从 PHP 运行查询时,需要将近 10 分钟!
其他查询正常执行(PDO和phpMyAdmin之间的持续时间相等)。
技术细节:
- 我正在使用Google的AppEngine和Cloud SQL。
- 运行 PHP5.5
- 执行 php 代码的应用程序引擎实例不繁忙。
- 查询结果约为 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下运行良好。
编辑
如果有人也有这种情况 - 似乎 PMA 在分页查询中添加了一个隐式限制,这使得在某些情况下一切运行得更快。
尝试在字段列表中编写没有子查询的查询。像这样:
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