问题背景: 最近有一个需求,要执行一个定时任务,多表连接查询后结果要插入到目标表中。如果是少量数据应该没问题,但是考虑到后期的数据量的增加,可能会有十万甚至百万级别的数据同时插入,就不得不考虑效率和数据库承载能力的问题了。
实现方式:通过sql 语句,直接在sql 中写业务逻辑。
此方式是把业务逻辑写在 SQL (insert into() table select from table2 ) ,
* 优点:直接操作数据库,执行效率高。
* 缺点:如果数据量超过1W+ 时候,数据库日志可能会抛出异常。
解决方案重点内容
* 1:查看数据库参数配置 Mysql > SHOW VARIABLES;
* 2:配置my.ini文件 文件中配置(具体参数可以根据数据量大小配置) bulk_insert_buffer_size=120M 或者更大 ,将insert语句的长度设为最 大。Max_allowed_packet=1M。Net_buffer_length=8k。
详细分析