我正在努力提高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
!
否,它不会访问数据库。它将从第一个查询创建的缓冲区中进行查询。