我在windows上面写好了一个web项目,访问速度还可以。接着我把它部署到linux上面进行访问,发现速度变得非常慢,觉得很不可思议。又是第一次遇到这样的问题,所以觉得相当的纠结,不过在我同事的指点下,终于找出问题所在了。
1、我之前在windows上测试的时候程序和mysql数据库都在我自己的机器上,接着我把它放到linux上面测试时,我也在linux上面的mysql数据库上执行了创建表的脚本。问题出来了,如果我在windows上的mysql中创建一个表名为AAA,创建完后这个表名会默认变为aaa,而我在linux上面做同样的操作时,创建的数据库的名字为AAA,也就是说不会自动变为小写。而我的sql语句在查询时表名都是小写的,这个时候就会提示找不到表名。
2、我在写程序时有一个问题。就是在访问数据库时,对数据库执行了好多个开闭connection的操作。
?? 例如下面的程序:
public int[] findUserAuthRecodeInSevenDates(List<String> xAxisData) { Connection conn=null; ResultSet rs=null; int length=xAxisData.size(); int[] sevenResult=new int[length]; try{ conn=this.getDataSource().getConnection(); conn.setAutoCommit(false); for(int i=0;i<xAxisData.size();i++){ int resultCount=0; String endDate=DataConverter.getDaysBofore(xAxisData.get(i), 6); rs=query2ResultSet(conn, DBSql.SELECT_USERAUTH_BY_DATES, xAxisData.get(i), endDate); while(rs.next()){ resultCount=rs.getInt(1); } sevenResult[i]=resultCount; } }catch(SQLException e){ SQLUtil.rolback(conn); e.printStackTrace(); }finally{ SQLUtil.close(conn); } return sevenResult; }
?我之前的操作是传递过来的参数是一个startDate 和一个endDate,然后对函数findUserAuthRecodeInSevenDates进行循环xAxisData.size()次,导致要进行xAxisData.size()次的conn=this.getDataSource().getConnection()和SQLUtil.close(conn)操作,导致速度相当的慢。
嘿嘿,问题解决了就好。