[英]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.