2011-08-08 75 views
0

我一直在創建一個php應用程序,使相當多的查詢到數據庫我會說約每個頁面大約30左右的負載。由於應用程序的性質,這是需要的。我正在使用OOP php技術並儘可能地優化我的查詢。我應該使用某種緩存系統嗎?或者你會說30是好的?這是一個典型的查詢。PHP優化是正確的?

好了,所以我__construct看起來是這樣的:

public function __construct($host = 'localhost', $user = 'root', $pass = 'root', $name = 'advert') 
    { 
     $this->_conn = new mysqli($host, $user, $pass, $name) 
      or trigger_error('Unable to connect to the server, please check your credentials.', E_USER_ERROR); 
    } 

而像這樣一個方法。

$sql = "SELECT `advert_id`, 
         `ad_title`, 
         `ad_image` FROM adverts WHERE UNIX_TIMESTAMP() < `ad_expires` AND `ad_show` = 0 AND `ad_enabled` = 1 ORDER BY `ad_id` DESC LIMIT 1"; 

     $stmt = $this->_conn->prepare($sql); 
     if ($stmt) { 
      $stmt->execute(); 
      $stmt->bind_result($ad_id, $ad_title, $ad_image); 
      $rows = array(); 
      while ($row = $stmt->fetch()) { 
       $item = array(
        'ad_id' => $ad_id, 
        'ad_title' => $ad_title, 
        'ad_image' => $ad_image 
       ); 
       $rows[] = $item; 
      } 

該應用程序有點像整個。

謝謝任何​​反饋將不勝感激。

**編輯對不起,我的意思是說30個查詢沒有30個連接

+3

不要爲每個對象使用新的連接。這是荒謬的。使用共享的DB對象。就我個人而言,我經常根據項目將我的項目存儲在'$ GLOBALS'中,但還有其他方法可以做到這一點。 – Brad

+0

30 * queries *很好,30 * connections *不是。除非你連接到30個不同的數據庫。 – deceze

+0

哦,不,我在閱讀完布拉德的評論之前提高了評論。在'$ GLOBAL'中,真的嗎?這更可笑,每頁超過30個連接。 –

回答

0

只是要一個連接並重新使用它。考慮到你可能有多個用戶,30個連接是很多的。

編輯:初步問題說連接。除非這些數據不經常更改,否則30個查詢都可以。在這種情況下,您可以首先執行查詢以查看是否需要提取數據,或者緩存的數據是否可以提供給用戶。

+0

對不起,我打算說30個查詢只有1個連接。 – JonnoTheBonno

1

您應該在有用時使用緩存。如果沒有查詢緩存的頁面生成時間爲3秒,並且緩存爲0.03,那麼顯然應該使用緩存。如果緩存沒有提供任何明顯的提升 - 不要花費資源。