看板 PHP 關於我們 聯絡資訊
之前紀錄點閱率 是另外開某個 table 紀錄所有細節,結構大概是這樣 主 table main_table mt_id PK .... 紀錄 table hits_table ht_id PK ht_date 留言時間 ht_ip 留言 IP mt_id main_table 的 fk 所以以點閱率撈資料的話會是 <?php $sql = "SELECT mt_label, COUNT(ht_id) AS totalHits FROM main_table LEFT JOIN hits_table ON main_table.mt_id = hits_table.mt_id GROUP BY hits_table.mt_id ORDER BY COUNT(ht_id) DESC"; ?> 這樣可以根據點閱率排行,並且撈出點閱數量 但隨著時間的經過,點閱率資料已經有三千多萬筆了 因此上方的效能變得非常差 於是我在 main_table 開了一個 mt_hits 的欄位 想要跑一次循環把總結寫進這個欄位 <?php $sql = "SELECT mt_id, COUNT(ht_id) as totalHits FROM hits_table GROUP BY mt_id"; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($query); do { $update = sprintf("UPDATE main_table SET mt_hits = %s WHERE mt_id = %s", $row['totalHist'], $row['mt_id']); myaql_query($update); } while ($row = mysql_fetch_assoc($query)); ?> 不過可能因為筆數太多,這隻 query 根本跑不完 請問該怎麼改善比較好 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.11.173
kuAIpAI:就是要算出點閱率? 新增一欄位 運算完後放入 07/26 09:46
kuAIpAI:之後每一次新增都去+1 撈取總點閱數 直接撈取該欄位? 07/26 09:46
mervynW:有對 hit_table 設 index 嗎? 07/26 10:33
chan15:之後就是要 +1,但現在要先把之前的灌進去 07/26 11:19
chan15:有設定 index 07/26 11:19
liaosankai:建一個叫counter的table獨立去計錄這些需要count的值 07/26 14:24
liaosankai:獨立管理能降低耦合性 07/26 14:26