Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询执行过于繁重_Php_Mysql - Fatal编程技术网

Php 查询执行过于繁重

Php 查询执行过于繁重,php,mysql,Php,Mysql,我有一个187840行的数据库。 当我执行此查询时,有一条消息显示查询执行被中断 过于繁重的查询 SELECT days.day,count(U.sig_name) as number FROM days LEFT JOIN linked U ON days.day = date(timestamp) AND U.sig_name REGEXP "^Tester" GROUP BY days.day; 什么是解决方案?这是您的问题: select days

我有一个187840行的数据库。 当我执行此查询时,有一条消息显示查询执行被中断

过于繁重的查询

SELECT days.day,count(U.sig_name) as number 
FROM days 
LEFT JOIN linked U ON 
    days.day = date(timestamp) 
    AND 
    U.sig_name REGEXP  "^Tester" 
GROUP BY days.day;
什么是解决方案?

这是您的问题:

select days.day, count(U.sig_name) as number
from days left join
     linked U
     on days.day = date(timestamp) AND U.sig_name REGEXP "^Tester"
group by days.day;
您有一个问题,因为围绕时间戳的函数调用。您可能会发现此版本更好:

select days.day,
       (select count(*)
        from linked u
        where u.timestamp >= days.day an du.timestamp < date_add(days.day, interval 1 day) and
              u.sig_name not like '%Tester%'
       )
from days;

为了提高性能,您需要在linkedtimestamp上创建一个复合索引,即sig_name。这消除了外部聚合—聚合使用索引,并允许使用索引进行匹配。

您可以使用限制来处理海量数据:

$limit_size = 10000;
        $flag_done = false;

        for ($i = 1; ! $flag_done; $i++) {
            $queryString = "SELECT days.day,count(U.sig_name) as number from days left join linked U on days.day = date(timestamp)  AND U.sig_name REGEXP  "^Tester" group by days.day LIMIT $index*$limit_size, $limit_size";

            if($result = mysql_query($queryString, $db)){
                [WHAT YOU WANT TO DO WITH RESULT HERE]
            } else $flag_done = true;
        }

您为什么要获取如此大的数据?预期的输出是什么?解决方案是请求更少的数据…您可以向我们展示tables CREATE语句吗?我想这里的两个问题是索引和REGEXP。设置良好的索引并使用LIKE Tester%而不是REGEXP。我想显示缩放折线图是的,如果我限制天数,它比我的查询更好,但我有356天:/我不理解你的评论。如果需要特定的天数范围,只需在外部查询中使用where子句。我使用此查询显示中联重科图表,我使用days表,因为表中缺少日期范围linked@MondherSmii . . . 对这个查询应该是您想要的。