MySQL in max的优化

   MySQL in max的优化,循环的次数从1361*124降到124*1,性能大大提升。

SELECT 0 AS initalBalance,
       0 AS receivabeBills,
       0 AS receivabeFee,
       0 AS paidUpBills,
       0 AS paidUpFee,
       SUM(IFNULL(gg.CLOSING_BALANCE, 0)) AS closeBalance,
       SUM(IFNULL(gg.SUM_CHARGING_POWER, 0)) AS sumPower,
       SUM(IFNULL(gg.SUM_PAID_UP_BILLS, 0)) AS sumPaidUpBills,
       SUM(IFNULL(gg.SUM_PAID_UP_FEE, 0)) AS sumPaidUpFee,
       gg.IS_PUBLISH AS isPublish
  FROM gg_report_charging gg
 WHERE gg.IS_DELETE = -1
   AND DATE_FORMAT(gg.REPORT_DATE, '%Y-%m-%d') IN
       (SELECT MAX(gg.REPORT_DATE) AS reportDate
          FROM gg_report_charging gg
         WHERE gg.IS_DELETE = -1
           AND gg.REPORT_DATE >= CONCAT('2018-01-01', ' 00:00:00')
           AND gg.REPORT_DATE < DATE_ADD(CONCAT('2018-01-01', ' 00:00:00'), INTERVAL 1 MONTH)
           AND gg.OPERATING_UNIT_CODE = '0900')
   AND gg.OPERATING_UNIT_CODE = '0900';
   
    id  select_type         table   type    key                       key_len  ref       rows  Extra                     
------  ------------------  ------  ------  ------------------------  -------  ------  ------  --------------------------
     1  PRIMARY             gg      ALL     (NULL)                    (NULL)   (NULL)    1361  Using where               
     2  DEPENDENT SUBQUERY  gg      range   ind_gg_REPORT_CHARGING    108      (NULL)     124  Using where; Using ind  
     


EXPLAIN
SELECT 0 AS initalBalance,
       0 AS receivabeBills,
       0 AS receivabeFee,
       0 AS paidUpBills,
       0 AS paidUpFee,
       SUM(IFNULL(gg.CLOSING_BALANCE, 0)) AS closeBalance,
       SUM(IFNULL(gg.SUM_CHARGING_POWER, 0)) AS sumPower,
       SUM(IFNULL(gg.SUM_PAID_UP_BILLS, 0)) AS sumPaidUpBills,
       SUM(IFNULL(gg.SUM_PAID_UP_FEE, 0)) AS sumPaidUpFee,
       gg.IS_PUBLISH AS isPublish
  FROM gg_report_charging gg
 WHERE gg.IS_DELETE = -1
   AND gg.REPORT_DATE =
       (SELECT gg.REPORT_DATE
          FROM gg_report_charging gg
         WHERE gg.IS_DELETE = -1
           AND gg.REPORT_DATE >= CONCAT('2018-01-01', ' 00:00:00')
           AND gg.REPORT_DATE < DATE_ADD(CONCAT('2018-01-01', ' 00:00:00'), INTERVAL 1 MONTH)
           AND gg.OPERATING_UNIT_CODE = '0900'
         ORDER BY REPORT_DATE DESC LIMIT 1)
   AND gg.OPERATING_UNIT_CODE = '0900';
    id  select_type  table   type   key                       key_len  ref                  rows  Extra                               
------  -----------  ------  ------ ------------------------  -------  -----------------  ------  ------------------------------------
     1  PRIMARY      gg      ref    ind_gg_REPORT_CHARGING  108      const,const,const       1  Using ind condition; Using where  
     2  SUBQUERY     gg      range  ind_gg_REPORT_CHARGING  108      (NULL)                124  Using where; Using ind            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值