美文网首页
mysql联表查询简单优化

mysql联表查询简单优化

作者: 吃板栗的猫 | 来源:发表于2019-03-29 15:40 被阅读0次
    今天在工作当中遇到一个需要联多张表查询的业务场景,心里大概知道如果正常写,放在线上去绝对是一个慢查询,于是乎就想了一些优化的点,下面整理出来,我主要是讲讲思路,因为每个业务场景会不同,如果看到文章的大佬们有更好的方法,希望大佬们评论指出来哈,小弟在此跪谢了!
    我们先来看一张图片
    image.png

    通过explain工具得出,id是相同的,查询表的顺序就是从上至下,o->ol->ors->toi->oor,然后我们再看type字段,其中o和toi都是全表扫描,o表在生产环境中数据量是巨大的,绝对不允许出现全表扫描操作,所以我们就需要根据这个来优化,让两个全表扫描降级;

    ps:type字段按照性能排序system > const > eq_ref > ref > range > index > all,all是性能最低的,对于sql语句,至少要达到range级别;

    通过业务场景可以将其中两个left jion改为inner jion,而且查询日期在生产环境是有限定的,我们可以将语句修改如下;


    image.png

    这个时候可以看出就只会扫toi全表,通过业务逻辑分析,o 与 toi 是 inner join 关系,我们可以通过分析具体的业务逻辑来给一个满足条件的时间范围;


    image.png

    这个时候就可以达到一个稍微的优化了;

    呃,简单说一下思路,因为每个人遇到的业务场景可能会不一样...
    1.写语句的时候,先在测试环境利用explain工具看一下大致的情况
    2.个人觉得的几个关键点就是,type的all一定要杜绝,当然,数据量很小的时候,可能是以这张表为驱动来执行查询的,视业务情况而定
    3.id字段如果相同,执行查询的顺序就是从上至下
    最后,多表联接的时候,字段最好明确出来,千万不要 select * ,这里为了简洁,所以用了 select * ,希望大佬们看到文章多多指点,对于另外的一些字段,由于本人有些也理解也很模糊,等到了解清楚之后再来更新,请多多谅解!再次跪谢!

    相关文章

      网友评论

          本文标题:mysql联表查询简单优化

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