[請益] SQL 執行問題

看板PHP作者 (ChaN)時間14年前 (2011/07/26 02:52), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串1/1
之前紀錄點閱率 是另外開某個 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

07/26 09:46, , 1F
就是要算出點閱率? 新增一欄位 運算完後放入
07/26 09:46, 1F

07/26 09:46, , 2F
之後每一次新增都去+1 撈取總點閱數 直接撈取該欄位?
07/26 09:46, 2F

07/26 10:33, , 3F
有對 hit_table 設 index 嗎?
07/26 10:33, 3F

07/26 11:19, , 4F
之後就是要 +1,但現在要先把之前的灌進去
07/26 11:19, 4F

07/26 11:19, , 5F
有設定 index
07/26 11:19, 5F

07/26 14:24, , 6F
建一個叫counter的table獨立去計錄這些需要count的值
07/26 14:24, 6F

07/26 14:26, , 7F
獨立管理能降低耦合性
07/26 14:26, 7F
文章代碼(AID): #1EBRjHx7 (PHP)
文章代碼(AID): #1EBRjHx7 (PHP)