热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于java:阿里禁止3张表的JOIN为什么咋解决

1.阿里为何禁止大于三张表的JOIN?此标准是针对MySQL系数据库的,模仿一些场景多造些数据去查问比照不难发现:每减少1张表的JOIN,查问性能就会显著降落。比方上面这个场景(3张表各100W数据,集体PC测试):3张表的JOIN连贯查问耗时3s多,如果再去JOIN一个字典表,耗时将在5s多。多JOIN一张表对性能的影响是比拟大的。

1. 阿里为何禁止大于三张表的JOIN?

此标准是针对MySQL系数据库的,模仿一些场景多造些数据去查问比照不难发现:每减少1张表的JOIN,查问性能就会显著降落。

比方上面这个场景(3张表各100W数据,集体PC测试):

3张表的JOIN连贯查问耗时3s多,如果再去JOIN一个字典表,耗时将在5s多。
多JOIN一张表对性能的影响是比拟大的。

2. 应该怎么解决能力尽量避免多表JOIN呢?

diboot框架很好的解决了这个问题,diboot内核除了简化关联场景的SQL外,还通过拆解JOIN为单表查问实现了 高性能。让大家在写的更少的同时,也使零碎性能达到更优。

上面咱们以上述场景的测试数据比照,来看看diboot关联绑定带来的性能晋升有多大吧。
场景:“居民” 与 “房产”的N-N关联场景,3张表各100W数据,两头表关联字段均有索引,集体PC测试。
需要:查问返回一页“居民”主表数据,并关联其“房产”数据,VO示意如下:

public class CitizenVO  {
    // 关联对象汇合
    private List houseList;
    //性别字典:GENDER
    private String genderLabel;
}

习惯Mybatis写SQL的同学,可能在想这段SQL该怎么写了,而应用diboot只须要增加两行注解,通知diboot他们之间的关联关系即可。

性能比照测试后果能够看到,绝对于手写SQL的4s+耗时,diboot仅需0.4s左右即可实现查问绑定,性能晋升近10倍。当数据量再大的时候,手写SQL会越来越慢,而diboot仍然能够稳固在<1s,性能晋升将轻松超过10倍。

这个比照测试也验证了diboot关联绑定的理论依据:《高性能MySQL》一书中“重构查问形式”的优化倡议的正确性,而且数据量越大,关联场景越简单,应用diboot关联绑定的性能劣势越显著。

所以:别再手写关联SQL了,diboot用起来,写的更少,性能更好!

参考资料:
看文章理解 diboot 如何做到高性能的?

看视频理解 diboot 如何做到进步查问性能的


diboot 简略高效的低代码开发框架


推荐阅读
  • http:blog.csdn.netzeo112140articledetails7675195使用TCPdump工具,抓TCP数据包。将数据包上传到PC,通过Wireshark查 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 本文讲述了一位80后的普通男性程序员,尽管没有高学历,但通过不断的努力和学习,在IT行业中逐渐找到了自己的位置。从最初的仓库管理员到现在的多技能开发者,他的职业生涯充满了挑战与机遇。 ... [详细]
  • 图数据库与传统数仓实现联邦查询使用CYPHER实现从关系数据库过滤时间序列指标一、MySQL得到研报实体在Oracle中的唯一ID二、Oracle中过滤时间序列数据三、CYPHER ... [详细]
  • 本文为初学者提供了一条清晰的学习路线,帮助他们逐步成长为优秀的Web开发人员。通过十个关键步骤,涵盖从基础到高级的各个方面,确保每位学习者都能找到适合自己的学习方向。 ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • 本文详细介绍了MySQL故障排除工具及其使用方法,帮助开发者和数据库管理员高效地定位和解决数据库性能问题。 ... [详细]
  • MySQL 5.7 服务端在 Windows 上的安装与配置
    本文详细介绍了在 Windows 系统上安装和配置 MySQL 5.7 服务端的方法,包括 my.ini 配置文件的设置、初始化数据库、启动服务以及设置用户权限等步骤。 ... [详细]
  • 2023年最新指南:如何在PHP中屏蔽警告和错误
    本文详细介绍了如何在PHP中屏蔽警告和错误,包括多种方法和最佳实践,帮助开发者提升代码质量和安全性。 ... [详细]
  • 从零开始编译Linux系统:第16章 全新起点
    本章将详细介绍如何从零开始编译一套完整的Linux系统,涵盖关键组件如glibc库的介绍及其重要性。通过本文,读者将了解从源代码构建Linux系统的全过程。 ... [详细]
  • 本文详细介绍如何在忘记MySQL服务器密码的情况下进行密码重置,包括具体的步骤和注意事项。 ... [详细]
  • 深入理解Redis中的字典实现
    本文详细介绍了Redis中字典的实现机制,包括其底层数据结构、哈希表与哈希节点的关系、元素添加方法及rehash操作的具体流程。 ... [详细]
  • 周排行与月排行榜开发总结
    本文详细介绍了如何在PHP中实现周排行和月排行榜的开发,包括数据库设计、数据记录和查询方法。涉及的知识点包括MySQL的GROUP BY、WEEK和MONTH函数。 ... [详细]
  • 如何在不同数据库中提取前N%的记录
    本文详细介绍了如何在SQL Server、Oracle和MySQL等不同数据库中提取前N%的记录。通过具体的示例和代码,帮助读者理解和掌握这些方法。 ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
author-avatar
狮子胯下
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有