大家好,我的程序需要不停的解析一个目录下的文件,然后把解析的内容组织成SQL语句,用jdbc的方式插入到MySQL数据库中,由于该目录下的文件不停的在生成,每个文件也很大,这就造成了每秒钟都会执行很多INSERT和SELECT(insert前可能需要select一下)最终导致整个server的cpu利用率一直处在99.9%,,请问有出率过类似问题的朋友么,有什么好的解决方案??
调试欢乐多
2、是否加索引
3、select和年insert的时间间隔能否再延长点
2、是否加索引
3、select和年insert的时间间隔能否再延长点
4.采用缓存机制吧,不要直接操作数据库,先把数据放入缓存,再有缓存入库,这样会好些
2. 慎用 SELECT
接手,而项目又急的话,那还是继续找一方面吧!
优化SQL的方式(INSERT前要SELECT 如果 只有你这个线程在 INSERT SELECT应该可以只使用一次)操作中间 增加 线程等待
INSERT INTO test (id, name) VALUES(1, 'a'),(2, 'b'),(3, 'c')
2、是否加索引
3、select和年insert的时间间隔能否再延长点
4.采用缓存机制吧,不要直接操作数据库,先把数据放入缓存,再有缓存入库,这样会好些
insert之前的select是否能用其他方式取代
这个是第一个关键,我们是先讨论为什么要select?而且是可能要select需要一个已经存在的以前插入数据,不过既然不是每个数据都需要,所以不是
还有什么可能呢?那只有防止重复了。 不过既然你的业务逻辑都不能保证是否重复,我想你的设计有问题。第二,批量insert的语句是
pstmt=conn.preparedStatement("insert into test_table(......) values(....?)");
pstmt.setString(1,"aaa");
pstmt.addBatch();
pstmt.setString(1,"bbb");
pstmt.addBatch();
.....
pstmt.executeBatch();
非要在insert之前加select的话
那你应该分析一下是insert慢还是色了传统慢
具体问题具体分析 不能一概而论
或者你在mysql里建个store procedure.参数是数组。
批量的数据组成数组丢进procedure里,让它做好了。