我有以下功能:
public static ArrayList<Article> getNewsList(Database db, Date start,Date end,int nextNth,int limit,String tableName,String entityQuery,String topicQuery) throws SQLException {
long a=System.currentTimeMillis();
ArrayList<Article> youTube=new ArrayList<Article>();
System.out.println("starting time is : "+a+" ");
Connection conn = db.getConnection();
PreparedStatement stmt = conn
.prepareStatement("SELECT n.title,n.link,n.Description,n.NewsContent,n.IURL,date(n.Published) FROM "+tableName+" as en inner join news as n on "
+ " en.dataitemid=n.id where en.dataitemtype=1 and dateAdded between ? and ? "+entityQuery+" "+topicQuery+" limit ?,?;");
stmt.setDate(1, start);
stmt.setDate(2, end);
stmt.setLong(3, nextNth);
stmt.setLong(4, limit);
ResultSet rset = stmt.executeQuery();
while (rset.next()) {
Article nw=new Article();
nw.setTitle(rset.getString(1));
nw.setLink(rset.getString(2));
nw.setDescription(rset.getString(3));
nw.setContent(rset.getString(4));
nw.setiURL(rset.getString(5));
nw.setDate(rset.getDate(6));
youTube.add(nw);
}
long b=System.currentTimeMillis();
System.out.println(b+" total time it takes is: "+(b-a));
return youTube;
}
这个功能很有趣。如你所见,我有2个变量用于函数的开始和结束时间,当我运行函数时需要36秒(b-a的结果)
但如果我在mysql中使用相同的参数运行相同的查询,它只需要0.019秒,这显示了巨大的差异,但你可以看到我的java代码中没有任何特殊需要花费很长时间。我很好奇,知道是什么导致了这个巨大的差异。有人可以帮忙吗?
答案 0 :(得分:1)
此处可能涉及网络延迟/错误。尝试在执行之前和之后移动a和b计时,并查看该值。在您的示例中,您没有提到要检索的行数,但这可能会影响您的计时。
答案 1 :(得分:0)
在进行查询调用之前,它必须做很多事情,加载JDBC驱动程序(在对象的类db
中),建立连接然后它会触发查询。
因此,所需的总时间非常多。如果您将long a=System.currentTimeMillis();
放在stmt.executeQuery()
和long b=System.currentTimeMillis();
之后,您会看到一些改进。