mysql先join多的数据表还是少的_表连接查询时 大表在前小表在后(是说的字段少的还是数据量少的??) 为什么...

展开全部

因为表连bai接查询时后面的表必然会du进行全表扫描zhi,所以数据少的放后面dao,提高sql语句内的执行效率。操作方容法如下:

1、首先优化原则,小表驱动大小,即小的数据集驱动大的数据集。

eeaa4f9ecc94cffaf6cdc966483c9e57.png

2、select * from A where id in(select id from b),当B表的数据集必须小于A表的数据集时,用in优于exists。

23cdb9d0ddaede366caed3047f9819e4.png

3、select *from A where exists (select 1 from B where b.id=a.id)。当A表的数据集小于B表的数据集时,用exists优于in。

a82f5942e4535931f21921dd0c95c1f3.png

4、exists(subquery)只返回true或false,因此子查询中的select * 也可以是select 1 或select 'x',官方说法是实际执行时会忽略掉select清单,因此没有区别。

d4e79e50b7d6cc79dc40c265df9cb0df.png

5、exists子查询的实际执行过程可能经过优化而不是理解上的逐条对比,如果担忧效率问题,可进行实际建立以确定是否有效率问题。

2ec90d7d85ac304f7ac3ea532eb2d8be.png

6、exists子查询往往也可以用条件表达式,其他子查询或者join来替代,何种最优需要具体问题具体分析。

2c8f95a6aaa83f2b1c60d7fa3bb265e7.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值