Mysql SQL优化(一) 高效率的有条件的去重 和 联合查询的优化

本文讲述了如何优化一个从记录表中选择会员号不同且ID最大的数据,与其他两张表联合查询的SQL语句。通过分析和尝试,作者发现通过调整查询方式,如先对数据排序再使用`GROUP BY`,可以显著提高查询速度,从5.5秒降至0.19秒。同时,文章探讨了在保持去重条件下添加条件查询的挑战及解决方案。
摘要由CSDN通过智能技术生成

=================从5.5秒查询到0.19秒,提升26倍速度=======================

新接手的一个项目,很多地方速度超慢需要改

这里有一个问题就是,从一张记录表中 选择会员号不同,且同一会员号中id最大的  全部数据 然后和其他2张表联合查询出来

标准版的数据库去重问题

原来的SQL是这样的

SELECT * 
FROM member M 
  LEFT JOIN 
  (select * 
   from member_source_recode 
   where id in
         (select max(id) 
          from member_source_recode  
          group by member_id)) MSR 
    ON M.ID=MSR.MEMBER_ID 
  LEFT JOIN v_makecard vmc 
    on vmc.oneSectorOnePiece=M.member_code 
WHERE 1=1

后面还跟了不少表2表1的条件查询

不带条件查询时间5.5秒,贼慢,这种方案是不现实,需要优化

一开始我以为问题出在子查询中 in语句大大的拖了后腿,然后进行一下联合查询测试

SELECT * 
FROM member M 
  LEFT JOIN member_source_recode MSR 
    ON M.ID=MSR.MEMBER_ID 
  LEFT JOIN v_makecard vmc 
    on vmc.oneSectorOnePiece=M.member_code 
WHERE 1=1

结果,查询时间4.1秒,原来最大的元凶在这

=================整改开始==================

1.在关联的表外面加上SELECT,关联上SELECT出来的结果

SELECT * 
FROM member M 
  LEFT JOIN (SELECT * FROM member_source_recode) MSR 
    ON M.ID=MSR.MEMBER_ID 
  LEFT JOIN (SELECT * FROM v_makecard) vmc 
    on vmc.oneSectorOnePiece=M.member_code 
WHERE 1=1

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值