2013-02-25 95 views
0

顯着不同的我也有類似的PHP文件與一個MySQL數據庫進行通信在下面的代碼:mysql的PHP/PDO語句的執行時間刷新

$db = new PDO('mysql:host=127.0.0.1;dbname=db;charset=UTF-8', 'name', 'pw',array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT => true, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=>true));  

$stmt=$db->prepare("SELECT SUM(anything) 
           FROM table 
           WHERE date IN (SELECT date FROM table WHERE something=:something AND somethingElse=:somethingElse) 
           AND somethingElse=:somethingElse1"); 

此代碼需要很長的時間,在瀏覽器中運行第一次通過...如果再次通過刷新執行,它運行速度會快100倍。我試圖找出是什麼原因導致這樣的pdo語句在刷新上運行得非常快,而且無法解決這個問題。

回答

1

這就是mysql的查詢緩存踢...只要你的RAM(讀取:MySQL緩存內存分配)足夠大,這將發生在幾乎任何SELECT。

0

這只是查詢緩存。
它與預先準備的陳述無關。

無論如何,您必須優化您的查詢,以使其始終快速運行。

0

服務器「緩存」執行您的查詢。所以第一次花費很多時間,但之後系統知道如何解決它。

+1

不知道爲什麼這是被投票。 – Mike 2013-02-25 19:46:56

1

要進行優化,一對夫婦的快速點:

  1. 避免和嵌套查詢。
  2. 請務必在已加入/搜索的字段中添加索引。
  3. 此外,如果可能的話預先計算總和並將它們存儲在另一個表中。
0

首先,如果你有正確的索引,這樣的事情不應該花很長時間(即使在大型表格上)。

你的表是什麼,以及如何設置索引。這將幫助我們優化您的查詢。