簡體   English   中英

PHP/MySQL 查詢優化?

[英]PHP/MySQL Query Optimization?

我有一個按預期工作的查詢,但是,我想優化它以使用更少的查詢。

以下代碼來自我為公告板系統創建的用戶獎牌插件。

$types = array('numposts', 'numthreads', 'numreps');
$medals = "";

foreach($types as $type)
{
    $query = $db->query("
        SELECT u.*, m.* 
        FROM ".TABLE_PREFIX."medals_".$type." m
        LEFT JOIN ".TABLE_PREFIX."medals u ON (m.".$type."_id=u.awid)
        WHERE awuid='".intval($post['uid'])."' AND type='".$type."'
        ORDER BY `".$type."` DESC LIMIT 1
    "); 

    while($results = $db->fetch_array($query))
    {
        $medals .= "<img src=\"uploads/medals/".$results['icon']."\" border=\"0\" alt=\"".$results['descrition']."\" title=\"".$results['description']."\" /> ";
    }
}

對於每個帖子,它都會運行此查詢以顯示用戶的獎牌。 根據帖子的數量,查詢乘以三。 因此,例如,如果一個線程有 10 個帖子...10x3 是 30...那么僅此代碼就執行了 30 個查詢。

優化此以使用更少查詢的最佳方法是什么? 也許緩存? 我不太擅長優化,所以在這里征求您的意見。

在帖子表中鏈接,因此您只能為那些實際顯示帖子的用戶獲取獎牌。 如果您單獨運行此查詢,則每個用戶只會獲得 1 個獎牌列表記錄,您可以將其存儲在數組或其他變量中。

然后,當您開始顯示帖子時,您可以返回獎牌列表並拉出用戶的獎牌。 如果(比如說)您的 10 個帖子中只有 2 個人聊天,這將花費您一個查詢來獲取 2x3=6 行數據(2 個用戶 x 3 種獎牌),以及一些 memory 來存儲獎牌結果,而您實際上獲取/顯示帖子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM