MySQL联查该如何优化?

联查

MySql联查根据被驱动表在关联字段上是否索引分为两种:Index Nested-Loop Join 以及 Block Nested-LoopJoin。假设T1符合条件记录行数为N,T2记录行数为M,以驱动表T1 与被驱动表T2分别描述两种逻辑:

如果被驱动表在关联字段上有索引,那么就选择Index Nested-Loop Join

1)从T1读取一行符合条件的记录行

2)通过关联字段从T2的索引检索符合条件的记录行

3)将T2 与T1的记录行拼接,作为结果集的一部分

4)重复 1到3步骤,直到T1无符合条件记录为止

那么该联查的复杂度:N + N*2*log2M(此处的2是考虑了回表)。因而,使用小表作为驱动表性能最好。此外在程序中嵌套查询,那么从检索行数上来说没有差别。但是,客户端与服务端要多很多次交互,因此在MySQL中执行联查的要比在程序中嵌套查询要好很多。

如果被驱动表在被关联字段上没有索引,那么就选择Block Nested-Loop Join

1)将T1表中符合条件的记录行放入到Join_Buffer中

2)将T2的记录行都读取一遍,然后再与J

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值