在我的脚本中,我需要通过日常流量消耗从数据库(带有httpd日志文件)接收信息。
所以,如果是每月30天,我会使用以下代码,循环30次:
$sql = "SELECT round(sum(bytes)/1048576) FROM logdata WHERE time_stamp BETWEEN '2012-" .$aMonth . "-" . $aDay ." 00:00:00' AND '2012-" .$aMonth . "-" . $aDay ." 23:59:59' AND status=200";
它运作得相当慢。
我认为,可以在一个结果集中使用存储过程或查询接收所有日期的所有结果。
任何人都可以帮助我吗? 感谢。
答案 0 :(得分:1)
你要做的第一件事就是找出缓慢来自哪里。基本上通常有两种可能性:
SELECT
- 声明“慢”,如果你的脚本很慢,请发布更多的脚本,以便给人们分析一些东西。
如果您的SELECT
- 语句“慢”,请首先查看数据库和表定义。字段time_stamp
和status
是否已编入索引?这两个字段的索引几乎肯定会显着改善语句性能。
如果它因为你用不同的值调用语句30次而很慢,可能只想在一个语句中接收你的数据,那么它可能看起来像这样:
SELECT DATE_FORMAT(time_stamp, "%y-%m") AS "_month",
DATE_FORMAT(ROUND(SUM(bytes)/1048576)
FROM logdata
WHERE time_stamp BETWEEN '2012-01-01 00:00:00' AND '2012-01-31 23:59:59'
AND status=200
GROUP BY _month;
答案 1 :(得分:0)
SELECT day,ROUND(total/1048576)
FROM (
SELECT DATE(time_stamp) day,sum(bytes) total
FROM logdata
WHERE status=200
GROUP BY 1
) t;