伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

为什么强烈推荐你使用单表查询?(续篇)

来源:本站原创 浏览:168次 时间:2021-08-09

在昨天的文章《为什么强烈建议你不要做联表查询?》中,大家提了一些比较有意义的问题,留言回复说不太清楚,今天单开这一篇做一些说明。

首先,在实际开发中,还是应该多使用单表查询,这样无论在性能上或者后续维护上,都会比复杂的关联查询要好,很多高性能的应用都会对关联查询进行分解。但是针对一些不同的场景,也应该比较灵活的采取join查询的方法,原则上join不要超过三张表。

数据库连接次数过多,效率更低

单表查询势必要考虑2次连接带来的开销,但是,MySQL对连接/断开是有处理的,而且网络越来越快,相比单表查询能够让缓存效率更高的这个优势下,多两次的连接所带来的开销基本可以忽略不计。(指一般业务下,具体问题还要具体分析)
多条件过滤+分页难实现

这里贴一个代码片段

无论是哪个表需要传参查询,最终都有一个符合条件的结果集,最终我们组合查询后的结果集,多条件过滤无法实现的问题就不存在了。至于分页,使用 com.baomidou.mybatisplus.core.metadata包下的IPage,很强大,谁用谁知道!
附代码:

public PageResult<ApplyVO> searchApplyPage(Page<Apply> page, Integer approvalStatus, String proposerCard, String message){        List<Long> ids = Optional.ofNullable(this.applyMapper.findMedicineApplyIds()).orElse(new ArrayList<>()).stream().map(Apply::getId).collect(Collectors.toList());        List<ApplyVO> applyVOS = Lists.newArrayList();        if(CollectionUtils.isEmpty(ids)){            return PageResult.of(applyVOS,0);        }        Page<Apply> apps = this.applyMapper.selectPage(page, new QueryWrapper<Apply>().lamb����,��ʵda()                .in(Apply::getId,ids)                .eq(!Objects.isNull(approvalStatus), Apply::getApprovalStatus, approvalStatus)                .eq(!StringUtils.isEmpty(proposerCard), Apply::getProposerCard, proposerCard)                .and(!StringUtils.isEmpty(message), i-> i.like(Apply::getTeamName, message).or()                        .like( Apply::getProposer, message).or()                        .like(Apply::getAthleteName, message)).orderByDesc(Apply::getApprovalNumber)        );        apps.getRecords().forEach(s->{            List<MedicineDetail> medicineDetails = this.detailMapper.selectList(new QueryWrapper<MedicineDetail>().eq("apply_id", s.getId()));            MedicineApplyVO medicineApplyVO = MedicineApplyVO.builder().accompany(s.getAccompany()).medicineDetails(medicineDetails).build();            applyVOS.add(medicineApplyVO);        });        return PageResult.of(applyVOS,apps.getPages(),apps.getCurrent(),apps.getCurrent(), apps.getTotal());    }

排序分页不同表的问题

这种,不考虑,直接join查询,数据组装或许能实现,但是没必要搞这么复杂,推荐大家使用分表查询,但不是所有的都必须分表,一看就是联表更方便的,我们一般都直接联表写SQL。
基本都解答完了,对于一头磕在键盘上的同学的留言,说的完全有道理,虚心接受,上一篇文章其实主要是推荐大家在开发中尽量使用单表查询,单表查询优点>缺点,既然是鼓动大家使用单表查询,我必然是介绍它的优点,哈哈。

但是在实际开发中,一些场景明显使用联表查询更方便,我也会去使用联表的方式,比如多喝热水同学的留言问题,不用考虑,直接联表查。

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net