美文网首页工作集
MySQL性能优化之关联查询优化

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

作者: 曹老师 | 来源:发表于2022-09-15 13:18 被阅读0次

    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;
    
    
    image

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

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

    3.关联查询优化总结

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

    相关文章

      网友评论

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

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