网站模板库
  • 首页
  • web前端工具
    • HTML/JS转换工具
    • JS/HTML格式化工具
    • 字母/英文大小写转换工具
    • robots.txt文件生成工具
    • Js压缩/格式化工具
    • Css在线压缩工具_代码格式化
  • 关于我们
    • 免责声明
    • 联系我们
    • 广告服务
    • 服务项目
    • 关于我们
    • 网站轮播
    • 公告
    • 成都优优科技专用
    • 按行业分类
  • web学院
    • 服务器教程
    • 学习资料
      • 基础书籍
      • 交互书籍
      • 入门教程
      • 特效分类
    • 案例分享
    • web资讯
  • 网页特效
    • 图片特效
    • 导航特效
    • 滑动按钮
    • 表单特效
    • 文字特效
    • 弹窗特效
    • 其他特效
  • 织梦模板
    • 科技/电子/数码/通信
    • 文化/艺术/广告/传媒
    • 装修/设计/家居/家具
    • 基建/施工/地产/物业
    • 餐饮/酒店/旅游/票务
    • 食品/果蔬/饮料/日用
    • 服饰/珠宝/礼品/玩具
    • 摄影/婚庆/家政/生活
    • 运动/健身/体育/器材
    • 学校/教育/培训/科研
    • 美容/保健/医院/医疗
    • 金融/财税/咨询/法律
    • 政府/组织/集团/协会
    • 汽车/物流/交通/搬运
    • 机械/设备/制造/仪器
    • 化工/环保/能源/材料
    • 农业/畜牧/养殖/宠物
    • 其他模版
    • IT/软件/信息/互联网
  • 手机模板
    • 手机APP模板
    • 微信小程序模板
    • wap
  • 网站模板
    • joomla模板
    • Drupal模板
    • z-blog模板
    • EyouCms模板
    • Bootstrap模板
    • 帝国cms模板
    • CmsEasy模板
    • MetInfo模板
    • 购物商城模板
      • Shopify主题
      • PrestaShop主题
    • 后台模板
    • 纯HTML模板
    • ecshop模板
    • phpwind模板
    • pbootcms模板
    • phpcms模板
    • wordpress模板
    • discuz模板
  • 教程
    • 织梦教程
    • Discuz教程
    • WordPress教程
    • Phpcms教程
    • Phpwind教程
    • ECShop教程
    • Joomla教程
    • Drupal教程
    • zblog教程
    • EyouCMS教程
    • 帝国cms教程
    • MetInfo教程
    • CmsEasy教程
登录
当前位置:网站模板库 > web学院 > 案例分享 > 如何做兼顾性能与可维护性的复杂查询?
admin 案例分享 2023-06-21 10:31:55

如何做兼顾性能与可维护性的复杂查询?

如何做兼顾性能与可维护性的复杂查询?,第1张

如何做兼顾性能与可维护性的复杂查询?,第2张

如果面对复杂的查询应该怎么办

情景 1: 就是可能那个查询的一个表跟另外一个表其实没有建立起外键关系(历史原因,短期内无法改变)

但 A 表跟 B 表之间可以透过一定关系关联起来,例如 A 表的 StoreId, locationId 之类在 B 表也有,理论上只要靠这些特定的字段就能读取到 B 表的某些特别数据(关系可能是一对多)。那大家会怎么做这种关联?在实体上用 JoinColumnOrFormula 吗?

情景 2: 另外也是上面这种延申的情况。两者不能直接用字段组合直接关系起来,要 StoreId+LocationId+(某用户的地址与 B 表的用户地址类近) 才能组合出来。。。 那用 JPA 查询以及实体关联应该怎么写呢。

最后一个问题就是习惯问题。如果我在对 A 表某部分的已经筛选了的数据查询 B 表,我应该是这样(伪代码,没从 IDE 运行过,但大概是这样)

做法 A:

List<DataA> TableARecords = daoA.findByCriteria(....)

List<DataB> dataBList = new ArrayList();

for(dataA in TableARecords){
	List<DataB> bResult = daoB.findBy(dataA.getStoreId);
    dataBList.add(bResult);
}

还是说我应该这样 做法 B

List<DataA> TableARecords = daoA.findByCriteria(....)
List<Integer> storeId = TableARecords.stream().map(e->e->getStoreId).collect(Collectors.toList);

Map<Integer, List<DataB>> mapB= daoB.findByStoreId(storeId).steram().collector(Collectors.groupBy(e->e.getStoreId);


for(dataA in TableARecords){
	Integer id = Optional.ofNullable(mapB.get(dataA.getStoreId)).orElse(null);
    if ( id == null ){
    	return
    }
    
	List<DataB> bResult = mapB.get(id)
    dataBList.add(bResult);
}

我的问题就是应该把这部分 map 的工作尽可能交给 dao 层还是交给业务层呢?上面那个在 for 循环里面查询,怕会把数据库打满或者也比较慢。下面那个就是把数据库连接数减少,但是 map 的部分交给业务,但可读性好像比较低。大家习惯怎么样子来解决这些查询的问题。

欢迎赐教。谢谢

----------------------- 以下是精选回复-----------------------

答:我主要看有什么现成的方法,没有 byIds() 方法就用 byId()
实践中,byIds() 的性能会好一点,最简单的原因是 byId() 每次都要写日志,而 byIds() 只用写一次,但只好很少很少。
健壮、好维护的就是好代码,性能问题等遇到再解决
答:你如果考虑循环次数的话,就根本不会这么想的好不好。正确的做法是联表查询
答:一般都是关联查询吧,能一次 sql 查完尽量一次查完吧,减少和数据库交互的次数

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何做兼顾性能与可维护性的复杂查询?

admin 钻石

分享到:
上一篇
最近几天 vultr 硅谷的速度好慢啊
下一篇
有人用 PhotonVPS 吗

相关推荐

php 中 static 属性和方法的继承问题

php 中 static 属性和方法的继承问题

想在 flask 中加一个数据处理层, 这个层与 flask 逻辑为分开的,只是共用一套模型层代码,大佬有好的组件推荐么?

想在 flask 中加一个数据处理层, 这个层与 flask 逻辑为分开的,只是共用一套模型层代码,大佬有好的组件推荐么?

如何用 PHP 在 aaa.com 设置 bbb.com 的 cookie 呢?:doge:

如何用 PHP 在 aaa.com 设置 bbb.com 的 cookie 呢?:doge:

前端攻城师在做项目时都会用到哪些工具?

前端攻城师在做项目时都会用到哪些工具?

0条评论

发表评论 取消回复

要发表评论,您必须先登录。

提供最优质的资源集合

立即查看 了解详情
网站模板库

主题/付费下载/查看/余额管理/自定义积分,集成支付,卡密,推广奖励等。

本站导航
  • 链接标题
友情链接
  • 链接标题
快速搜索
本站由钛宇宙强力驱动
友情链接:
    商业源码网蜀ICP备2023005044号
    网站模板库
    • 登录
    • 注册
    网站模板库
    • 首页
    • web前端工具►
      • HTML/JS转换工具
      • JS/HTML格式化工具
      • 字母/英文大小写转换工具
      • robots.txt文件生成工具
      • Js压缩/格式化工具
      • Css在线压缩工具_代码格式化
    • 关于我们►
      • 免责声明
      • 联系我们
      • 广告服务
      • 服务项目
      • 关于我们
      • 网站轮播
      • 公告
      • 成都优优科技专用
      • 按行业分类
    • web学院►
      • 服务器教程
      • 学习资料►
        • 基础书籍
        • 交互书籍
        • 入门教程
        • 特效分类
      • 案例分享
      • web资讯
    • 网页特效►
      • 图片特效
      • 导航特效
      • 滑动按钮
      • 表单特效
      • 文字特效
      • 弹窗特效
      • 其他特效
    • 织梦模板►
      • 科技/电子/数码/通信
      • 文化/艺术/广告/传媒
      • 装修/设计/家居/家具
      • 基建/施工/地产/物业
      • 餐饮/酒店/旅游/票务
      • 食品/果蔬/饮料/日用
      • 服饰/珠宝/礼品/玩具
      • 摄影/婚庆/家政/生活
      • 运动/健身/体育/器材
      • 学校/教育/培训/科研
      • 美容/保健/医院/医疗
      • 金融/财税/咨询/法律
      • 政府/组织/集团/协会
      • 汽车/物流/交通/搬运
      • 机械/设备/制造/仪器
      • 化工/环保/能源/材料
      • 农业/畜牧/养殖/宠物
      • 其他模版
      • IT/软件/信息/互联网
    • 手机模板►
      • 手机APP模板
      • 微信小程序模板
      • wap
    • 网站模板►
      • joomla模板
      • Drupal模板
      • z-blog模板
      • EyouCms模板
      • Bootstrap模板
      • 帝国cms模板
      • CmsEasy模板
      • MetInfo模板
      • 购物商城模板►
        • Shopify主题
        • PrestaShop主题
      • 后台模板
      • 纯HTML模板
      • ecshop模板
      • phpwind模板
      • pbootcms模板
      • phpcms模板
      • wordpress模板
      • discuz模板
    • 教程►
      • 织梦教程
      • Discuz教程
      • WordPress教程
      • Phpcms教程
      • Phpwind教程
      • ECShop教程
      • Joomla教程
      • Drupal教程
      • zblog教程
      • EyouCMS教程
      • 帝国cms教程
      • MetInfo教程
      • CmsEasy教程

      弹窗标题

      这是一条网站公告,可在后台开启或关闭,可自定义背景颜色,标题,内容,用户首次打开关闭后不再重复弹出,此处可使用html标签...