当前位置: 首页 > news >正文

MySQL | MySQL 为什么不推荐使用JOIN

MySQL 为什么不推荐使用JOIN

MySQL 不推荐使用 JOIN 的说法是过于简化的。实际上,在某些情况下使用 JOIN 是非常有用的,但在其他情况下可能会带来性能问题、复杂性和可维护性问题以及重复数据等问题。

首先我们需要知道JOIN语句是用于将多个表中的数据进行联合起来的操作。

JOIN 本质就是各个表直接数据循环匹配,嵌套查询。也就是从主表(驱动表)中取出一条数据,遍历从表(被驱动表),将匹配到的数据放到result。以次类推,主表中的每一条记录与从表记录进行判断。

  • 在关联查询的时候,那个表作为主表(驱动表),那个表作为从表(被驱动表),不是那个表在前边那个表就是主表,而是MySQL优化器决定谁是主表(除了STRAIGHT_JOIN),谁是从表,优化器会通过很多方面来决定例如索引
  • straight_join 是内连接查询 是那个表在前边 那个表就是主表,。使用straight_join一定要慎重,因为部分情况下人为指定的执行顺序并不一定会比优化引擎要靠谱。
比如A表 inner join B表查询 create table a(f1 int,f2 int ,INDEX(f1));
create table b(f1 int,f2 int,index(f2));内连接
EXPLAIN select * from a inner join b on a.f1=b.f1;#b作为主表
EXPLAIN select * from a inner join b on a.f1=b.f1 where a.f1 = 1;#a作为主表
EXPLAIN select * from a inner join b on a.f1=b.f1 where b.f2 = 1;#b作为主表

在小数据量的情况下可以使用JOIN 联合查询,一旦数据量很大效率就很难保证了。

分布式的分库分表。这种时候是不建议跨库join的。目前mysql的分布式中间件,跨库join表现不良。

数据库是最底层的,瓶颈往往是数据库。建议数据库只是作为数据store(存储)的工具,而不要添加业务上去

MySQL 为什么不推荐子查询

MySQL子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。

http://www.lryc.cn/news/219202.html

相关文章:

  • [LeetCode] 1.两数之和
  • ruby语言怎么写个通用爬虫程序?
  • 7 交换机与VLAN
  • C++指针笔记
  • vue中app.use()做了什么
  • 【网安AIGC专题11.1】论文12:理解和解释代码,GPT-3大型语言模型学生创建的代码解释比较+错误代码的解释(是否可以发现并改正)
  • 【GEE】4、 Google 地球引擎中的数据导入和导出
  • 【C++】特殊类设计+类型转换+IO流
  • JAVA整理学习实例(一)面向对象
  • QT 实现解密m3u8文件
  • 论文阅读—— BiFormer(cvpr2023)
  • 理解 fopen的 rwa r+w+a+ 参数含义
  • 【强化学习】17 ——DDPG(Deep Deterministic Policy Gradient)
  • 驱动开发11-2 编写SPI驱动程序-点亮数码管
  • Java使用pdfbox进行pdf和图片之间的转换
  • 机器学习中的关键组件
  • 【JVM】JDBC案例打破双亲委派机制
  • 每天五分钟计算机视觉:池化层的反向传播
  • Docker的安装、基础命令与项目部署
  • Nodejs和npm的使用方法和教程
  • 机器学习---支持向量机的初步理解
  • 【unity实战】Unity实现2D人物双击疾跑
  • Spring面试题:(二)基于xml方式的Spring配置
  • XR Interaction ToolKit
  • spring-boot中实现分片上传文件
  • 【ICN综述】信息中心网络隐私安全
  • 基于STC12C5A60S2系列1T 8051单片机EEPROM应用
  • 手撕排序之直接选择排序
  • 洛谷 P1359 租用游艇
  • springboot中没有主清单属性解决办法