zoukankan      html  css  js  c++  java
  • mysql sql优化<1>

    <pre name="code" class="html">explain SELECT t.*  FROM
    	    (
    			SELECT 
    			t1.sn AS clientSn,
    			t1.userNick,
    			t1.mobilePhone,
    			t3.personName,
    			t2.availableBalance,
    			(SELECT IFNULL(SUM(amount) , 0) FROM ClientRechargeOrder t WHERE t.clientSn= t1.sn AND t.status ='2') AS rechargeAmount,
    			(SELECT IFNULL(SUM(amount) , 0) FROM ClientWithDrawOrder t WHERE t.clientSn= t1.sn AND t.status IN ('1','2','3','4') ) AS withdrawAmount,
    			( (SELECT IFNULL(SUM(capitalBalance) , 0) FROM ProductRepayment t WHERE t.clientSn= t1.sn AND t.status= '1') 
    			  + 
    			  (SELECT IFNULL(SUM(capitalBalance) , 0) FROM VirtualProductOrder t WHERE t.clientSn= t1.sn AND t.status= '1')  
    			) AS investAmount,
    			( (SELECT IFNULL(SUM(yieldBalance) , 0) FROM ProductRepayment t WHERE t.clientSn= t1.sn AND t.status= '2') 
    			  + 
    			  (SELECT IFNULL(SUM(yieldBalance) , 0) FROM VirtualProductOrder t WHERE t.clientSn= t1.sn AND t.status= '2')  
    			) AS yieldAmount,
    			(SELECT IFNULL(SUM(t0.amount) , 0) FROM ClientCoupon t,Coupon t0 WHERE t.clientSn= t1.sn AND t.status = '2' AND t.couponSn = t0.sn AND t0.type IN (1,2)) AS cashCouponAmount
    			FROM  Client t1 , ClientAssetInfo t2 , ClientPersonalInfo t3
    			WHERE t1.sn = t2.clientSn AND t1.sn = t3.clientSn
    	    ) t  WHERE (t.rechargeAmount + t.yieldAmount + t.cashCouponAmount - t.withdrawAmount - t.investAmount - t.availableBalance) != 0;
    		
    		
    +----+--------------------+------------+--------+---------------+---------+---------+-----------------+-------+-------------+
    | id | select_type        | table      | type   | possible_keys | key     | key_len | ref             | rows  | Extra       |
    +----+--------------------+------------+--------+---------------+---------+---------+-----------------+-------+-------------+
    |  1 | PRIMARY            | <derived2> | ALL    | NULL          | NULL    | NULL    | NULL            |  2327 | Using where |
    |  2 | DERIVED            | t1         | ALL    | PRIMARY       | NULL    | NULL    | NULL            |  2327 | NULL        |
    |  2 | DERIVED            | t3         | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.t1.sn      |     1 | NULL        |
    |  2 | DERIVED            | t2         | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.t1.sn      |     1 | NULL        |
    |  9 | DEPENDENT SUBQUERY | t          | ALL    | NULL          | NULL    | NULL    | NULL            |     1 | Using where |
    |  9 | DEPENDENT SUBQUERY | t0         | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.t.couponSn |     1 | Using where |
    |  8 | DEPENDENT SUBQUERY | t          | ALL    | NULL          | NULL    | NULL    | NULL            |     1 | Using where |
    |  7 | DEPENDENT SUBQUERY | t          | ALL    | NULL          | NULL    | NULL    | NULL            | 12890 | Using where |
    |  6 | DEPENDENT SUBQUERY | t          | ALL    | NULL          | NULL    | NULL    | NULL            |     1 | Using where |
    |  5 | DEPENDENT SUBQUERY | t          | ALL    | NULL          | NULL    | NULL    | NULL            | 12890 | Using where |
    |  4 | DEPENDENT SUBQUERY | t          | ALL    | NULL          | NULL    | NULL    | NULL            |  2126 | Using where |
    |  3 | DEPENDENT SUBQUERY | t          | ALL    | NULL          | NULL    | NULL    | NULL            |  5786 | Using where |
    +----+--------------------+------------+--------+---------------+---------+---------+-----------------+-------+-------------+
    12 rows in set (0.00 sec)
    
    
    添加3个索引:
    mysql>  create index ProductRepayment_idx1 on ProductRepayment(clientSn);
    
    mysql>  create index ClientRechargeOrder_idx1 on ClientRechargeOrder(clientSn);
    Query OK, 0 rows affected (0.24 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> create index ClientWithDrawOrder_idx1 on ClientWithDrawOrder(clientSn);
    Query OK, 0 rows affected (0.12 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
     create index ClientCoupon_idx1 on ClientCoupon(clientSn);
    修改后的执行计划:
    
    mysql> explain SELECT t.*  FROM     ( SELECT  t1.sn AS clientSn, t1.userNick, t1.mobilePhone, t3.personName, t2.availableBalance, (SELECT IFNULL(SUM(amount) , 0) FROM ClientRechargeOrder t WHERE t.clientSn= t1.sn AND t.status ='2') AS rechargeAmount, (SELECT IFNULL(SUM(amount) , 0) FROM ClientWithDrawOrder t WHERE t.clientSn= t1.sn AND t.status IN ('1','2','3','4') ) AS withdrawAmount, ( (SELECT IFNULL(SUM(capitalBalance) , 0) FROM ProductRepayment t WHERE t.clientSn= t1.sn AND t.status= '1')    +    (SELECT IFNULL(SUM(capitalBalance) , 0) FROM VirtualProductOrder t WHERE t.clientSn= t1.sn AND t.status= '1')   ) AS investAmount, ( (SELECT IFNULL(SUM(yieldBalance) , 0) FROM ProductRepayment t WHERE t.clientSn= t1.sn AND t.status= '2')    +    (SELECT IFNULL(SUM(yieldBalance) , 0) FROM VirtualProductOrder t WHERE t.clientSn= t1.sn AND t.status= '2')   ) AS yieldAmount, (SELECT IFNULL(SUM(t0.amount) , 0) FROM ClientCoupon t,Coupon t0 WHERE t.clientSn= t1.sn AND t.status = '2' AND t.couponSn = t0.sn AND t0.type IN (1,2)) AS cashCouponAmount FROM  Client t1 , ClientAssetInfo t2 , ClientPersonalInfo t3 WHERE t1.sn = t2.clientSn AND t1.sn = t3.clientSn     ) t  WHERE (t.rechargeAmount + t.yieldAmount + t.cashCouponAmount - t.withdrawAmount - t.investAmount - t.availableBalance) != 0;
    +----+--------------------+------------+--------+--------------------------+--------------------------+---------+-----------------+------+-------------+
    | id | select_type        | table      | type   | possible_keys            | key                      | key_len | ref             | rows | Extra       |
    +----+--------------------+------------+--------+--------------------------+--------------------------+---------+-----------------+------+-------------+
    |  1 | PRIMARY            | <derived2> | ALL    | NULL                     | NULL                     | NULL    | NULL            | 2327 | Using where |
    |  2 | DERIVED            | t1         | ALL    | PRIMARY                  | NULL                     | NULL    | NULL            | 2327 | NULL        |
    |  2 | DERIVED            | t3         | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.t1.sn      |    1 | NULL        |
    |  2 | DERIVED            | t2         | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.t1.sn      |    1 | NULL        |
    |  9 | DEPENDENT SUBQUERY | t          | ALL    | NULL                     | NULL                     | NULL    | NULL            |    1 | Using where |
    |  9 | DEPENDENT SUBQUERY | t0         | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.t.couponSn |    1 | Using where |
    |  8 | DEPENDENT SUBQUERY | t          | ALL    | NULL                     | NULL                     | NULL    | NULL            |    1 | Using where |
    |  7 | DEPENDENT SUBQUERY | t          | ref    | ProductRepayment_idx1    | ProductRepayment_idx1    | 4       | zjzc.t1.sn      |    1 | Using where |
    |  6 | DEPENDENT SUBQUERY | t          | ALL    | NULL                     | NULL                     | NULL    | NULL            |    1 | Using where |
    |  5 | DEPENDENT SUBQUERY | t          | ref    | ProductRepayment_idx1    | ProductRepayment_idx1    | 4       | zjzc.t1.sn      |    1 | Using where |
    |  4 | DEPENDENT SUBQUERY | t          | ref    | ClientWithDrawOrder_idx1 | ClientWithDrawOrder_idx1 | 4       | zjzc.t1.sn      |    1 | Using where |
    |  3 | DEPENDENT SUBQUERY | t          | ref    | ClientRechargeOrder_idx1 | ClientRechargeOrder_idx1 | 4       | zjzc.t1.sn      |    1 | Using where |
    +----+--------------------+------------+--------+--------------------------+--------------------------+---------+-----------------+------+-------------+
    12 rows in set (0.00 sec)
    


    
       
    
    
  • 相关阅读:
    bzoj3272 Zgg吃东西
    bzoj3894 文理分科
    poj1149 PIGS
    poj1637 Sightseeing tour
    [Wc2007]剪刀石头布
    poj2396 Budget
    [NOI2017]游戏
    CF666E Forensic Examination
    bzoj4889 [Tjoi2017]不勤劳的图书管理员
    CF587F Duff is Mad
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6199182.html
Copyright © 2011-2022 走看看