数据库会被这个代码击中2次吗



我正在努力提高api的性能。我需要知道标记的第二行是否也会进入数据库?因为我想尽量减少这种情况。

     StringBuffer queryBuf = new StringBuffer("some query in SQL");
--------->StringBuffer queryBuf2 = new StringBuffer(" SELECT DISTINCT PP.ID FROM ( " + queryBuf + ") PP ");
        Query query1 = getSession().createSQLQuery(queryBuf2.toString());
        query1.setReadOnly(true);
        ScrollableResults results = query1.scroll();
        if (results.isLast() == false)
            results.last();
        int total = results.getRowNumber() + 1;
        results.close();
        logger.debug(">>>>>>TOTAL COUNT<<<<<< = {}", total);

否。只有ScrollableResults results = query1.scroll();行执行sql。

此外,您可能希望使用SQL COUNT

它简单明了,不会命中,您只是在创建StringBuffer对象。

您只需要创建一个字符串缓冲区。它没有达到数据库。如果我纠正了这段代码,可能会出现编译错误。

我需要知道标记的第二行是否也会进入数据库?

您在前三行中构建StringBuffer对象,为什么它要进入DB!如果不需要同步,则可以使用StringBuilder

否,它不会访问数据库。它将从第一个查询创建的缓冲区中进行查询。

最新更新