java切分查询数据库表
Posted xiaozw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java切分查询数据库表相关的知识,希望对你有一定的参考价值。
在实际应用中,我经常用到遇到根据单号查询,单号又是批量如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
以上是关于java切分查询数据库表的主要内容,如果未能解决你的问题,请参考以下文章