接口时间响应较长,导致数据库无法及时添加!
一次性插入5w条数据,无法添加,时间耗时非常高,cpu出现内存溢出的情况!
首先使用sql语句是删除锁表
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
删除锁表
kill trx_mysql_thread_id
kill 47 即可删除因为长时间无法插入的数据的锁表!
我的sql语句是这样的
INSERT INTO `pro_product` (
`id`,
`model`,
`auth_id`,
`class_id`,
`brand_id`,
`tyc`,
`pro_count`,
`price`,
`bth_num`,
`packages`,
`pro_imgUrl`,
`pro_sort`,
`pro_recommend`,
`pro_status`,
`popular_status`,
`createTime`,
`updateTime`,
`pro_pdfUrl`,
`pro_desc`,
`pro_short_desc`,
`identification`
)
VALUES
< foreach collection = "TUExcelVoList" item = "TUExcelVo" SEPARATOR = "," > (NULL,
#{TUExcelVo.model},#{TUExcelVo.authId},#{TUExcelVo.classId},#{TUExcelVo.brandId},#{TUExcelVo.tyc},#{TUExcelVo.proCount},#{TUExcelVo.price},#{TUExcelVo.bthNum},#{TUExcelVo.packages},#{TUExcelVo.imgUrl},1,1,0,0,NOW(),NOW(),#{TUExcelVo.pdfUrl},'',#{TUExcelVo.desc},(SELECT * FROM (SELECT MAX(CONCAT('TU-',(SELECT(SUBSTRING_INDEX(MAX(`identification`), '-', - 1) + 1) FROM pro_product))) FROM `pro_product`) ub))
< / foreach >
就是一条简单的foreach添加数据语句
可是在添加sql中涵盖了查询语句,注意最后一个字段
(SELECT * FROM (SELECT MAX(CONCAT('TU-',(SELECT(SUBSTRING_INDEX(MAX(`identification`), '-', - 1) + 1) FROM pro_product))) FROM `pro_product`) ub)
关键出在这个字段(`identification`)的问题,当我在代码中插入这个数据内容,而不是通过二次查询的方式将此数据添加至数据库中。
INSERT INTO `pro_product` (
`id`,
`model`,
`auth_id`,
`class_id`,
`brand_id`,
`tyc`,
`pro_count`,
`price`,
`bth_num`,
`packages`,
`pro_imgUrl`,
`pro_sort`,
`pro_recommend`,
`pro_status`,
`popular_status`,
`createTime`,
`updateTime`,
`pro_pdfUrl`,
`pro_desc`,
`pro_short_desc`,
`identification`
)
VALUES
< foreach collection = "TUExcelVoList" item = "TUExcelVo" SEPARATOR = "," > (NULL,
#{TUExcelVo.model},#{TUExcelVo.authId},#{TUExcelVo.classId},#{TUExcelVo.brandId},#{TUExcelVo.tyc},
#{TUExcelVo.proCount},#{TUExcelVo.price},#{TUExcelVo.bthNum},#{TUExcelVo.packages},#{TUExcelVo.imgUrl},1,1,0,0,NOW(),NOW(),#{TUExcelVo.pdfUrl},'',#{TUExcelVo.desc},#{TUExcelVo.identification})
< / foreach >
经过修改,插入5w条数据,只需要1s不到
这里需要根据每个人的业务及实际开发情况而定的需求所修改内容!