继上篇文章《绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来》发布后在博客园首页展示得到了挺多的阅读量,我这篇文章就是对上篇文章的千万级数据库表在高并发访问下如何进行测试访问
这篇文章的知识点如下:
1.如何自写几十行代码就能模拟测试高并发下访问千万级数据库表
2.比较高并发下(200次/秒,2000次/秒,10000次/秒)数据库的性能
3.比较千万级数据库在查询时加索引与不加索引的巨大差异(说实话,这个测试结果让我自己本人也很惊讶)
针对上篇文章插入的1000万条数据到数据库后,我们进行了高并发下测试(模拟教师输入姓名和密码在1秒内登录数据库),线程类代码如下
packageinsert;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;publicclassThreadToMysqlextendsThread{publicStringteacherName;publicStringpassword;publicThreadToMysql(StringteacherName,Stringpassword){//构造函数传入要查询登录的老师姓名和密码this.teacherName=teacherName;this.password=password;}publicvoidrun(){Stringurl=jdbc:mysql://127.0.0.1/teacher;Stringname=com.mysql.jdbc.Driver;Stringuser=root;Stringpassword=123456;Connectionconn=null;try{Class.forName(name);conn=DriverManager.getConnection(url,user,password);//获取连接conn.setAutoCommit(false);//关闭自动提交,不然mit()运行到这句会报错}catch(ClassNotFoundExceptione1){e1.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}if(conn!=null){LongstartTime=System.currentTimeMillis();//开始时间Stringsql=selectidfromt_teacherwheret_name=+teacherName+andt_password=+password+;//SQL语句Stringid=null;try{Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery(sql);//获取结果集if(rs.next()){id=rs.getString(id);}conn.commit();stmt.close();conn.close();}catch(SQLExceptione){e.printStackTrace();}Longend=System.currentTimeMillis();System.out.println(currentThread().getName()+查询结果:+id+开始时间:+startTime+结束时间:+end+用时:+(end-startTime)+ms);}else{System.out.println(currentThread().getName()+数据库连接失败:);}}}
测试代码改为10000(再次提示。clean一下项目去掉缓存,这样结果更准确)
packageinsert;publicclassTestThreadToMysql{publicstaticvoidmain(String[]args){for(inti=1;i=10000;i++){StringteacherName=String.valueOf(i);newThreadToMysql(teacherName,123456).start();}}}
可以看出来就算你的数据库设置为再高你的数据库服务器也响应不过来。。。。顶多响应5758个
小小总结,1.可以自己测试高并发下挑战数据库性能,2.对索引在查询性能上的强大有一个大概认识很适合初学者学习了解
推荐: