join

笛卡尔积:CROSS JOIN
内连接:INNER JOIN
左连接:LEFT JOIN
右连接:RIGHT JOIN
外连接:OUTER JOIN,MySQL不支持OUTER JOIN,但是我们可以对左连接和右连接的结果做UNION操作来实现

SELECT *
from sys_user_role b  
left join sys_user a  USING(user_id)
-- on a.user_id=b.user_id

Mysql Join算法原理

Simple Nested-Loop Join(简单的嵌套循环连接)
Index Nested-Loop Join(索引嵌套循环连接)
Block Nested-Loop Join(缓存块嵌套循环连接)

永远用小结果集驱动大结果集(其本质就是减少外层循环的数据数量)
为匹配的条件增加索引(减少内层表的循环匹配次数)
增大join buffer size的大小(一次缓存的数据越多,那么内层包的扫表次数就越少)
减少不必要的字段查询(字段越少,join buffer 所缓存的数据就越多)
Show variables like 'optimizer_switc%'; 
Show variables like 'join_buffer_size%';
SHOW VARIABLES like 'datadir%'

InnoDB以页(page)为基本的IO单位,每个页的大小为16KB
InnoDB会为每个表创建用于存储数据的.ibd文件
这意味着我们有多少表要连接就需要读多少个文件,虽然可以利用索引,但还是免不了频繁的移动硬盘的磁头

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值