MySQL存储过程或查询中的循环信息请求

时间:2012-06-02 09:42:06

标签: mysql sql

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

它运作得相当慢。

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

任何人都可以帮助我吗? 感谢。

2 个答案:

答案 0 :(得分:1)

你要做的第一件事就是找出缓慢来自哪里。基本上通常有两种可能性:

  1. 您的SELECT - 声明“慢”,
  2. 你的脚本很慢。
  3. 如果你的脚本很慢,请发布更多的脚本,以便给人们分析一些东西。

    如果您的SELECT - 语句“慢”,请首先查看数据库和表定义。字段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;
    

答案 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;
相关问题