美文网首页
使用子查询作为主表优化含有join的sql语句

使用子查询作为主表优化含有join的sql语句

作者: sicilian_wiz | 来源:发表于2018-03-29 16:19 被阅读0次

    今天在工作中需要查询到用户相关明细数据,该数据需要连接四个表(使用left join),使用5个表的字段,且数据量较大。在操作中发现直接使用

    select column from a left join b on a.id = b.id left join c on b.uid = c.uid left join d on c.uid = d.uid left join e on a.id = e.id

    (其中主表a是一个订单明细表,表中有15000+条数据15个字段)

    查询十分缓慢,后更发生navicat直接卡死的现象,后台开发同事指导我可以使用一个子查询(实际上要再多嵌套一个查询)进行对主表的过滤,可以大大优化这个sql语句。难点在于在from中嵌套的这个子查询需要select的字段到底有哪些?其中部分是直接在主句使用到的字段,部分是需要用于作为其他表join到该"主表"的连接字段。

    后续重新思考和实操,发现两个重点:

    1. 如果在写from主表时使用该子查询的环节中,直接在子查询中select需要调用的字段实际上会比较困难,容易出错(遗漏字段),最好的方法是先省略这些字段把子查询、连接写完,再选择该子查询需要select到的字段。

    2. 在这个子查询中要进行对原主表的最优化过滤,才能实现该sql语句的最佳优化。

    (网上也有相关资料描述这种优化:使用from中的子查询来优化join

    相关文章

      网友评论

          本文标题:使用子查询作为主表优化含有join的sql语句

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