老哥们,我感觉我写的代码像 shi 一样。。求指点
故事是这样子的。。。
领导让我制定个代码规范(小部门刚成立),然后看了阿里的规约,看到他们不推荐使用三个 left join 以上,心血来潮想测一下 left join 和在 java 中拼哪个快。
由于实力不行,模拟了 200000 条数据,当一次左连接并且加上索引时,很快啊,所有数据大概 200ms,然后我用 java 拼接,算了好久也没出结果。。现在我怀疑是我写的两个 for 复杂度太高了,请大佬们帮忙看一下我的 shi 一样的代码。。
//service 层拼 public Page<PersonInfoDTO> getPersonByJava() { long startTime = System.currentTimeMillis(); IPage<PersonDO> personPage = personMapper.selectPage(new Page<>(),null); IPage<AddressDO> addressPage = addressMapper.selectPage(new Page<>(),null); //todo 获取 person 信息 List<PersonDO> personDOList = personPage.getRecords(); List<PersonInfoDTO> personInfoDTOList = new ArrayList<>(); //todo 获取所有 address 信息 List<AddressDO> addressDOList = addressPage.getRecords(); int personSize = personDOList.size(); int addressSize = addressDOList.size(); for (int i = 0; i < personSize ; i++) { PersonDO personDO = personDOList.get(i); PersonInfoDTO personInfoDTO = new PersonInfoDTO(); personInfoDTO.setName(personDO.getName()); personInfoDTO.setSex(personDO.getSex()); personInfoDTO.setId(personDO.getId()); for (int j = 0; j < addressSize; j++) { AddressDO addressDO = addressDOList.get(j); if (addressDO.getName().equals(personInfoDTO.getName())){ personInfoDTO.setAddress(addressDO.getAddress()); personInfoDTOList.add(personInfoDTO); } } } Page<PersonInfoDTO> personInfoDTOPage = new Page<>(); personInfoDTOPage.setRecords(personInfoDTOList); long endTime = System.currentTimeMillis(); long usedTime = endTime - startTime; System.out.println(usedTime); return personInfoDTOPage; }
<!--name 加了索引--> <select id="getPersonByJoin" resultType="com.hpy.convertfoodemo.convert.entity.DTO.PersonInfoDTO"> select t1.id, t1.name, t1.sex, t2.address from test.person t1 left join test.address t2 on t1.name = t2.name </select>