在做Java实践项目时,需要从数据库中查询数据并做分页展示。
其中,在获取总条数的时候,一般能想到的有两种方式:
A. 将查询结果存放在List中,再通过list.size()方法获得总条数;
B. 通过count语句的sql查询,直接获得总条数;
从个人经验和直观感受来看,A是在Java中计算,当数量大的时候,需要将结果存放在内存当中,这个过程肯定耗时更多一些,而B是直接在数据库查询得到一个数值,而且不需要查询出结果,因此应该是B方式的效率会更高一些。
但是,在网上以及在项目中也有看到不少A方式的示例。在网上查阅了一些资料,有网友提到可以使用.size()方法获得,count的方式反而提的很少。
这让我感觉到有些疑惑,究竟两种方式的效率如何?哪个会更优?
于是我自己做了一个实验,如下:
public void test() {
//A方式
long aStart = System.currentTimeMillis();
List list = this.getaList(); //将查询结果存入list
int totalCount = list.size();
long aEnd =System.currentTimeMillis();
//B方式
long bStart = System.currentTimeMillis();
int totalCount2 = this.getbCount(); //使用count语句查询
long bEnd = System.currentTimeMillis();
//结果输出
System.out.println("A: total-" + totalCount + "; time-" + (aEnd - aStart));
System.out.println("B: total-" + totalCount2 + "; time-" + (bEnd - bStart));
}
得到结果如下:
A: total-28483; time-21940
B: total-28483; time-321
结论:使用count语句比list.size()的效率更高,尤其在数据量非常大的时候。
网友评论