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需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一介草民丶

谢谢老板的一分钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值