版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26437925/article/details/83177428
在业务中,会遇到这样的场景:
获取到用户ID列表,需要得到用户的具体信息列表,用户的ID可能是遍历某个列表得到的。
会出现如下两种写法
@Test
public void testCmp(){
int n = 1000;
Long startTime = System.currentTimeMillis(); //获取开始时间
for(int i = 0; i < n; i ++) {
tbUserService.getUserById(1L * i);
}
long endTime = System.currentTimeMillis(); //获取结束时间
System.out.println("==============");
System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间
System.out.println("==============");
}
@Test
public void testCmp2(){
int n = 1000;
Long startTime = System.currentTimeMillis(); //获取开始时间
List<Long> ids = new ArrayList<>();
for(int i = 0; i < n; i ++) {
ids.add(1L * i);
}
tbUserService.getUserByIds(ids);
long endTime = System.currentTimeMillis(); //获取结束时间
System.out.println("==============");
System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间
System.out.println("==============");
}
- 每得到一个用户ID就去查询一次数据库(每一次的查询都是主键索引查询)
- 得到所有ID后 采用
in
语句(in语句一般是range
类型的查询)
n | 写法1 - 测试耗时(毫秒) | 写法2 - 测试耗时(毫秒) |
---|---|---|
10 | 341 | 373 |
100 | 494 | 460 |
500 | 988 | 499 |
1000 | 1304 | 538 |
显然频繁的查询数据库将会非常的耗时,所以务必实现评估下数据量
和查询次数
以及查询语句的性能
,虽然in是耗时的,但是对比这种大批量的平凡查询还是可取的。