我有一个php,每天计划任务执行一次,逻辑如下:
1.连接数据库,从数据库中Select读取相关数据到数组
2.根据得到的数据数量进行循环,循环中间包含3个mysql操作(select、insert、update各一个)
3.循环完后关闭数据库连接
循环执行的次数根据步骤1的mysql_num_rows而定,基本上几千上万。
那么在循环过程中就会短时间内连续执行几千上万X3次数据库操作,效率非常低下。并且因为循环次数多任务重需要很长时间才能执行完,会导致nginx出现504错误。
且频繁数据库操作和长连接,占用过多资源,导致整个环境效率低下。
请问该怎么优化呢?
麻烦各位大神赐教,先谢谢了
就你说的这个情况,建议不要用请求的方式解决,用 crontab 加计划任务在后台运行 php 脚本,数据库查询时分批处理,比如总共 100000 条,每次 1000 条;如果必须逐条处理且速度不是很快,建议一边 fetch_row 一边处理,避免先放入 array 再循环。记得根据执行情况 set_time_limit 和数据库连接的超时时间。