作者chan15 (ChaN)
看板PHP
標題[請益] SQL 執行問題
時間Tue Jul 26 02:51:58 2011
之前紀錄點閱率
是另外開某個 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