0

我正在尝试提高 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);
4

5 回答 5

2

你只是创建一个字符串缓冲区。它没有击中数据库。如果我正确,此代码可能会产生编译错误。

于 2013-07-30T10:43:27.120 回答
2

不,只有该行ScrollableResults results = query1.scroll();执行 sql。

此外,您可能想要使用SQL COUNT

于 2013-07-30T10:04:38.050 回答
2

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

于 2013-07-30T10:12:04.743 回答
1

不,它不会命中数据库。它将从第一个查询创建的缓冲区中查询。

于 2013-07-30T10:04:54.947 回答
1

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

StringBuffer在前三行中构造对象,为什么要访问数据库!StringBuilder如果不需要同步,您可以使用!

于 2013-07-30T10:04:30.257 回答