2016-03-05 51 views
4

我遇到了使用特定查詢(下面寫入)的查詢執行速度過慢的問題。PDO - 與手動執行相比,特定的查詢速度非常慢

奇怪的是,手動運行查詢時(使用phpMyAdmin),只需要一秒鐘完成,而從PHP與PDO運行它,它需要近10分鐘!

其他查詢正常執行(等於PDO & phpMyAdmin之間的持續時間)。

技術細節:

  • 我使用谷歌的AppEngine &雲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下運行得很好。

+0

我面臨同一個問題與一個查詢。我唯一的猜測就是它與我所做的連接有關。如果我刪除它們中的一個,即使通過Pdo –

+0

也可以正常工作。但是,爲什麼只有在通過PDO執行時,JOIN纔會降低查詢速度?我的意思是,如果查詢速度慢,PDO和phpMyAdmin都應該很慢。 – Eran

+0

這是我還沒有理解的一點。我在這裏詢問了一個未解答的問題,因此 –

回答

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 
相關問題