Mysql多表关联链接顺序说明
selected例句mysql语句多表查询mysql对多表关联查询使⽤,简单总结就是通过驱动表作为⼊⼝,⼀层层的往内部查询,驱动表的数据量对查询效率很关键。
⽽对驱动表的选择,from后的表顺序并不起决定作⽤,mysql会根据多重因素选择最优的链接顺序。如果想⾃⾏控制链接顺序可以通过Optimizer Hints(mysql 8.0)指定。
使⽤saklia数据库
1.先通过⼀个left join的例⼦说明from后的表顺序对实际执⾏时的关联顺序不起决定作⽤的现象
explain
al_id, a.rental_date,b.film_id素数python编程
from rental a left join inventory b on a.inventory_id = b.inventory_id
可以看到执⾏顺序是a>b
2.接下来,我们调换⼀下表的顺序
explain
al_id, a.rental_date,b.film_id
from inventory b left join rental a on a.inventory_id = b.inventory_id
从explain输出结果看,b确实到前⾯去了,变成了b>a
3.还没结束接着看,我们带上a的⼀个条件
explain
al_id, a.rental_date,b.film_id
from inventory b left join rental a on a.inventory_id = b.inventory_id
where a.rental_date >='2005-01-19 02:18:51';
看到顺序⼜变成了a>b,此sql并未改变from表的顺序,只是增加了a的过滤条件
网络电话永久免费版4.如果就是想将b放到第⼀个驱动表的位置,可以通过Optimizer Hints的JOIN_PREFIX指定
explain
select/*+JOIN_PREFIX(b) */ a.rental_id, a.rental_date,b.film_id
from inventory b left join rental a on a.inventory_id = b.inventory_id
where a.rental_date >='2005-01-19 02:18:51';
无限次观看app下载安卓不过JOIN_PREFIX只有mysql8.0才有,5.7并没有。除了JOIN_PREFIX还有JOIN_FIXED_ORDER、JOIN_ORDER、JOIN_SUFFIX⽤来指定表链接顺序
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论