作者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
1F:→ kuAIpAI:就是要算出点阅率? 新增一栏位 运算完後放入 07/26 09:46
2F:→ kuAIpAI:之後每一次新增都去+1 捞取总点阅数 直接捞取该栏位? 07/26 09:46
3F:推 mervynW:有对 hit_table 设 index 吗? 07/26 10:33
4F:→ chan15:之後就是要 +1,但现在要先把之前的灌进去 07/26 11:19
5F:→ chan15:有设定 index 07/26 11:19
6F:推 liaosankai:建一个叫counter的table独立去计录这些需要count的值 07/26 14:24
7F:→ liaosankai:独立管理能降低耦合性 07/26 14:26