我有一个包含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;
解决方案是什么?
答案 0 :(得分:0)
这是您的查询:
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;
由于timestamp
周围的函数调用,您遇到了问题。你可能会发现这个版本更好:
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;
对于性能,您需要linked(timestamp, sig_name)
上的复合索引。这消除了外部聚合(聚合使用索引代替),并允许索引用于匹配。
答案 1 :(得分:0)
您可以使用LIMIT处理海量数据:
$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;
}