加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java切分查询数据库表

发布时间:2020-12-15 05:30:42 所属栏目:Java 来源:网络整理
导读:在实际应用中,我经常用到遇到根据单号查询,单号又是批量如1000个单号,直接1000个in子查询是不行的,子查询是用上限的。如果表中数据达到上百万以上。即使有单号字段有索引查询也是很慢。这时可以用切分。把1000个单号切分成,每300个去查询。这样会快很多

在实际应用中,我经常用到遇到根据单号查询,单号又是批量如1000个单号,直接1000个in子查询是不行的,子查询是用上限的。如果表中数据达到上百万以上。即使有单号字段有索引查询也是很慢。这时可以用切分。把1000个单号切分成,每300个去查询。这样会快很多。下面是demo。

 1 /**
 2      * 准备工作,插入数据,100000条记录。
 3      */
 4     @Test
 5     public void test11() {
 6         for (int i = 0; i < 100000; i++) {
 7             UserInfo userInfo = new UserInfo();
 8             //生成随机数单号(1到100000)。
 9             Random random = new Random();
10             int max = 100000;
11             int min = 1;
12             int s = random.nextInt(max) % (max - min + 1) + min;
13 
14             userInfo.setAge(random.nextInt(90) + 10);
15             userInfo.setName("张三" + i);
16             userInfo.setBillCode("" + s);
17             userInfoMapper.insertSelective(userInfo);
18         }
19     }
20 
21     /**
22      * 查询数据,如查询1000个单号,每300个拆分。最后把结果集合并。
23      */
24     @Test
25     public void test12() {
26         //结果集
27         List<UserInfo> result=Lists.newArrayList();
28         List<String> listSearch = Lists.newArrayList();
29         for (int i = 1; i <= 1000; i++) {
30             listSearch.add(i+"");
31         }
32         //按每300个拆分。只需查询3次数据库,用in查询。
33         List<List<String>> listOne = Lists.partition(listSearch,300);
34         for (List<String> one : listOne) {
35             UserInfoExample example=new UserInfoExample();
36             example.createCriteria().andBillCodeIn(one);
37             List<UserInfo> oneUserInfo= userInfoMapper.selectByExample(example);
38             result.addAll(oneUserInfo);
39         }
40         //输出
41         for(UserInfo userInfo:result){
42             System.out.println("显示:"+JSON.toJSONString(userInfo));
43         }
44     }

?

?输出:

?

?

?

源码下载地址:

链接:https://pan.baidu.com/s/1hFq9DefyFMKgrk06iJylXw 提取码:fx4o

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读