java和mysql中相同SQL查询的运行时间差别很大

时间:2014-07-24 20:03:48

标签: java mysql jdbc

我有以下功能:

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代码中没有任何特殊需要花费很长时间。我很好奇,知道是什么导致了这个巨大的差异。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

此处可能涉及网络延迟/错误。尝试在执行之前和之后移动a和b计时,并查看该值。在您的示例中,您没有提到要检索的行数,但这可能会影响您的计时。

答案 1 :(得分:0)

在进行查询调用之前,它必须做很多事情,加载JDBC驱动程序(在对象的类db中),建立连接然后它会触发查询。

因此,所需的总时间非常多。如果您将long a=System.currentTimeMillis();放在stmt.executeQuery()long b=System.currentTimeMillis();之后,您会看到一些改进。