电脑技术网——专业手机电脑知识平台,关注科技、手机、电脑、智能硬件
MySQLMSSQLAccessOracle

干货~多线程下1分钟已完成1000万条数据插进到数据…

2021-01-22 11:53:59 出处:[ 菜菜电脑网 ] 人气:次阅读

 

 环境:作准备测试前,我拍照了一下我公司的电脑是4核的(四个子窗口)

 

废话少说,从外部附上代码和结果吧

package tenThreadInsert;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.util.Date;public class MyThread extends Thread{				public void run() {					 String url = "jdbc:mysql://127.0.0.1/teacher";  					 String name = "com.mysql.jdbc.Driver";  					 String user = "root";  					 String password = "123456";  					Connection conn = null;  					try {						Class.forName(name);						conn = DriverManager.getConnection(url, user, password);//提供直达  						conn.setAutoCommit(false);//暂停自动提请,不然conn.commit()直通到这句就会报错					} catch (ClassNotFoundException e1) {						e1.printStackTrace();					} catch (SQLException e) {						e.printStackTrace();					}				// 开始时间				Long begin = new Date().getTime();				// sql词根				String prefix = "INSERT INTO test_teacher (t_name,t_password,sex,description,pic_url,school_name,regist_date,remark) VALUES ";				try {					// 存留sql后缀					StringBuffer suffix = new StringBuffer();					// 设置事务为非自动提出					conn.setAutoCommit(false);					// 相对于st,pst就会更好些					PreparedStatement  pst = (PreparedStatement) conn.prepareStatement("");//正要监督语句					// 外层循环,总提请事务次数					for (int i = 1; i <= 10; i++) {						suffix = new StringBuffer();						// 第j次送交步长						for (int j = 1; j <= 100000; j++) {							// 重构SQL后缀							suffix.append("('" +i*j+"','123456'"+ ",'男'"+",'教师'"+",'www.bbb.com'"+",'Java大学'"+",'"+"2016-08-16 14:43:26"+"','#'" +"),");						}						// 构筑非常简单SQL						String sql = prefix + suffix.substring(0, suffix.length() - 1);						// 附加执行者SQL						pst.addBatch(sql);						// 拒绝执行加载						pst.executeBatch();						// 审批事务						conn.commit();						// 清空上一次去掉的数据						suffix = new StringBuffer();					}					// 头等连通					pst.close();					conn.close();				} catch (SQLException e) {					e.printStackTrace();				}				// 完结时间				Long end = new Date().getTime();				// 耗时				System.out.println("100万条数据放入花费时间 : " + (end - begin) / 1000 + " s"+"  填入已完成");	}	}

 测试代码

package tenThreadInsert;public class Test {	public static void main(String[] args) {		for (int i = 1; i <=10; i++) {		      new MyThread().start();			}	}}

 运转结果:

数据库的结果:

看着了吧,无论如何填入了1000万条,准确无误

然后我就自已试试20个线程,每个线程填入50万条数据忘了性能怎么样。结果如下:

 

 线程越多不是好事,反而更慢。。。

当线程超出100个,每个线程放入10万条数据实际上是火炉内存冰冻

好了,测试就到此结束,只想交流的可以加群一起揭示技术: 494389786

关于我们 - 广告合作 - 联系我们 - 免责声明 - 网站地图 - 投诉建议 - 在线投稿

©CopyRight 2008-2020 caicaipc.com Inc All Rights Reserved.
菜菜电脑网 版权所有