MySQL拆分大的 DELETE 或 INSERT 语句

最新【MySQL性能优化】拆分大的 DELETE 或 INSERT 语句

以下是三零网为大家整理的最新【MySQL性能优化】拆分大的 DELETE 或 INSERT 语句的文章,希望大家能够喜欢!

17. 拆分大的 DELETE 或 INSERT 语句

如果你需要在一个在线的网站上去执行一个大的 DELETE 或 INSERT 查询,你需要非常小心,要避免你的操作让你的整个网站停止相应。因为这两个操作是会锁表的,表一锁住了,别的操作都进不来了。

Apache 会有很多的子进程或线程。所以,其工作起来相当有效率,而我们的服务器也不希望有太多的子进程,线程和数据库链接,这是极大的占服务器资源的事情,尤其是内存。

如果你把你的表锁上一段时间,比如30秒钟,那么对于一个有很高访问量的站点来说,这30秒所积累的访问进程/线程,数据库链接,打开的文件数,可能不仅仅会让你泊WEB服务Crash,还可能会让你的整台服务器马上�炝恕�

所以,如果你有一个大的处理,你定你一定把其拆分,使用 LIMIT 条件是一个好的方法。下面是一个示例:

while (1) {

//每次只做1000条

mysql_query("DELETE FROM logs WHERE log_date <= '2009-11-01' LIMIT 1000");

if (mysql_affected_rows() == 0) {

// 没得可删了,退出!

break;

}

// 每次都要休息一会儿

usleep(50000);

}


来自:http://www.q3060.com/list4/list126/7686.html

你可能感兴趣的:(数据库,服务器,文章,访问量,在线的)