MySQL性能优化之关联查询优化

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2021-01-23 16:40 被阅读0次

上一篇 <<<MySQL性能优化之分页查询优化
下一篇 >>>


1.left join原理

按照语句的写法,以left join的左边为主表去关联右边的表,如果左边是大表,则会导致执行的行数较多,性能较差。

EXPLAIN select * from jarye_1 left join jarye_2 on jarye_1.t1= jarye_2.t1;

2.inner join原理

无论哪个表写在前面,优化器会选择使用数据量小的表作为驱动表,去关联大的表,以减少全包扫描的范围。
所以使用 inner join 时,排在前面的表并不一定就是驱动表。

2.1Nested-Loop Join(NLJ) 嵌套循环连接算法(主键关联查询)

EXPLAIN select * from mayikt_1 inner join mayikt_2 on mayikt_1.t1= mayikt_2.t1;

2.2Block Nested-Loop Join (BNL) 基于块的嵌套循环连接算法(非索引关联查询)

EXPLAIN select * from mayikt_2 straight_join mayikt_1 on mayikt_1.t2= mayikt_2.t2;

3.关联查询优化总结

1.超过三个表禁止 join。【阿里巴巴JAVA开发手册】
2.需要 join 的字段,数据类型必须绝对一致;【阿里巴巴JAVA开发手册】
3.多表关联查询时,保证被关联的字段需要有索引,尽量选择NLJ算法。【阿里巴巴JAVA开发手册】
4.小表驱动大表,写多表连接sql时如果明确知道哪张表是小表可以用straight_join写法固定连接驱动方式,省去mysql优化器自己判断的时间

相关文章

网友评论

    本文标题:MySQL性能优化之关联查询优化

    本文链接:https://www.haomeiwen.com/subject/ylceoktx.html