如何使用Cron脚本处理大量MySQL行
我正在编写一个PHP Cron脚本,它将从论坛部分获取所有主题并迭代查看它们是否符合某些条件(例如,如果它们大于2年) 。如何使用Cron脚本处理大量MySQL行
通常我会做:
SELECT DATE_CREATED FROM `threads` WHERE BOARD = board_id
AND (YEAR(NOW()) - YEAR(DATE_CREATED)) >= 2
,然后循环相应。
现在有趋势,可能有100万或更多的线程符合这个标准。
起初,我认为不会有任何需要限制返回的行,因为它是一个cron脚本
现在我想通,可能有一些内存的问题时,返回的行变成真的很大。
这是我需要帮助如何有效地循环通过Cron作业执行的PHP脚本中的数千个MySQL记录。
我曾想过使用LIMIT,然后遍历它作为分页内容,但我想知道是否有更有效的方法来做到这一点;希望只在MySQL服务器上。
在此先感谢。
回答:
1 - 首先解决方案 - 使用限制和偏移会是这样的(伪代码):
//get total number of rows $total_rows = $db->$query("SELECT COUNT(*) FROM `threads`
WHERE BOARD = board_id
AND (YEAR(NOW()) - YEAR(DATE_CREATED)) >= 2");
//put in your array or wherever you need 1000 rows at a time
for($i = 0; $i < $total_rows/1000; i++){
$array << $db->query("SELECT DATE_CREATED FROM `threads`
WHERE BOARD = board_id
AND (YEAR(NOW()) - YEAR(DATE_CREATED)) >= 2
LIMIT ($i+1, $i+1)*1000");
}
2 - 解决方案:让行逐月,考虑到你只有二年(假设2016- 2017)为了简单起见,您可以做类似
$base_year = 2016; //nest loops for the years and for the months
for($i = 0; $i < 2; $i++){
for($j = 0; j < 12; $j++){
$array << $db->query("SELECT DATE_CREATED FROM `threads`
WHERE BOARD = board_id
AND YEAR(DATE_CREATED) = ($i + $base_year)
AND MONTH(DATE_CREATED = ($j+1)");
}
}
希望这可以帮助您找到合适的,更适合您的方式。
以上是 如何使用Cron脚本处理大量MySQL行 的全部内容, 来源链接: utcz.com/qa/257738.html