mysql默认的配置中,每次事务提交都要写binlog和redo log,如果循环太多次——比如循环插入10w条记录——就会非常慢。一般优化思路分两种:
1 修改 sync_binlog为一个100-1000间的值,让binlog每隔100-1000个事务后再写一次;修改innodb_flush_log_at_trx_commit =2; 这么搞的好处是降低了写log的次数和消耗的时间,缺点是,中间出错的话,会丢失一部分的binlog和redolog导致无法通过他们来在出问题是恢复生产库数据。
2 将所有的插入/更新 *** 作放到一个事务中进行。这样,显然就只需要一次写binlong和redolog咯。
-- 如果是单纯的SQLSELECT a.name FROM tableA a LEFT JOIN tableB b ON A.id = b.id AND b.logintime<='2016-04-21 14:20:00'
-- 方法一 这种嵌套 尽量少用
-- 方法二 过多的查询 尽量少用
-- 不过总的来看 这些查询都要根据具体业务和实际情况来查询的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)