Php 查询执行过于繁重
我有一个187840行的数据库。 当我执行此查询时,有一条消息显示查询执行被中断 过于繁重的查询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
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 . . . 对这个查询应该是您想要的。