1

在我的脚本中,我需要通过日常流量消耗从数据库(使用 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";

它的工作相当缓慢。

我认为,可以通过存储过程或查询在一个结果集中接收所有日期的所有结果。

有谁能够帮助我?谢谢。

4

2 回答 2

1

您要做的第一件事是找出缓慢的来源。基本上通常有两种可能:

  1. 您的SELECT-statement 是“慢”,
  2. 你的脚本很慢。

如果您的脚本很慢,请发布更多该脚本,以便人们进行分析。

如果您的SELECT-statement 很“慢”,请先查看数据库和表定义。字段time_stampstatus索引?这两个字段上的索引几乎肯定会显着提高语句性能。

如果它很慢,因为您使用不同的值调用该语句 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;
于 2012-06-02T09:52:29.037 回答
0
SELECT day,ROUND(total/1048576)
FROM (
    SELECT DATE(time_stamp) day,sum(bytes) total
    FROM logdata
    WHERE status=200
    GROUP BY 1
) t;
于 2012-06-02T09:53:12.397 回答