所以我正在处理的代码执行以下操作:
test.php的:
使用date_next<查询所有实体的mysql表(实体) NOW()和date_end> NOW()
计算新的date_next
我的问题是,如果实体表(#1)中有超过50,000个条目,我会收到错误“太多内存”。我猜我应该尝试限制#1的结果集。所以我想每次都在结果集上加上一个LIMIT。因此脚本test.php每天运行多次,每次限制来自#1的查询,每次只检索20,000个结果。但我不确定这是否是限制结果集的正确方法。
对于#6,存在网络延迟。我尝试使用curl multi函数一次发送多个请求,但每个请求已经很大,因为对于每个请求,正在发送500个ID。我不太确定使用curl multi函数的优点是什么......
我有没有考虑过使这项工作更有效率的方法? 我正在考虑以下事项: - 反向代理 - OS调整TCP数据包的数量 - 使用编译器缓存 - 增加PHP内存限制。不知道我应该设置什么其他配置。 - 多次运行test.php以限制结果集。每次只处理20,000或更少的记录。
答案 0 :(得分:1)
查询步骤1 - 5
SELECT table2.entity_id FROM table2
INNER JOIN (SELECT table1.id FROM table1
WHERE table1.date_next < NOW() and table2.date_end > NOW()
HAVING DATEDIFF(date_next_function(date_next), NOW()) > 1) as table3
ON table2.entity_id = table3.id
我正在使用having子句使用date_next_function的计算过滤掉24小时之外的所有行