需要从一个表中查询出记录,并且插入到另一个表中。如果一个事务写成insert into b select * from a where addtime <= 'xxxx-xx-xx xx:xx:xx'
delete from a where id in (select id from orderbaks)这种形式的话,总是会Lock wait timeout exceeded的错误,因为服务器平常负荷已经很大了,所以不想修改mysql的innodb_buffer_pool_size的参数。所以想写成查询一条执行一条的形式,写成一个php的while循环的形式,每次要导入大约五千条左右的数据!问题:
1、这样是否会引发别的问题呢???
2、是不是应该有一个更好的方法呢???求高手解答

解决方案 »

  1.   

    php默认超时时间是30秒。你可以通过set_time_limit来设置超时时间。
      

  2.   

    有foreach干嘛用while.
    拆了就是了。
      

  3.   

    你的服务器是一直负荷大吗? 晚上 凌晨的时候负荷也很多吗??尽量找个点集中的处理数据。 能用一个sql解决的  我不建议用循环去数据库处理。当然实在是没办法那就循环吧。
      

  4.   

    不建议一条一条处理,分批处理比较好insert into b select * from a where addtime <= 'xxxx-xx-xx xx:xx:xx' LIMIT offset, 100
    delete from a where id in (select id from orderbaks LIMIT offset, 100)
      

  5.   

    replace into b select * from a where addtime <= 'xxxx-xx-xx xx:xx:xx'