mysql 查询优化案例

mysql> explain SELECT  c.`sn` clientSn,asm.`clientManagerSn`,pry.`productSn`,1 TYPE,pr.`capitalBalance`,pr.`yieldBalance`,pry.`realValueEndDate`,pr.`status`
    -> FROM `ProductRepayment` pr 
    -> LEFT JOIN `ProductRepay` pry ON pry.`productSn` = pr.`productSn`
    -> LEFT JOIN `ProductAccess` pa ON pa.`productSn` = pr.`productSn`
    -> LEFT JOIN `Client` c ON c.`sn` = pr.`clientSn`
    -> LEFT JOIN `AssignClientManager` asm ON asm.`clientSn`=pr.`clientSn`
    -> WHERE pa.`supportTransfer` =2
    -> UNION  ALL
    -> SELECT c.`sn` clientSn,asm.`clientManagerSn`,hd.productSn,2,thd.capitalBalance,thd.yieldBalance,thd.settlementDate,IF(thd.status =1 OR thd.status=2,1,2)
    -> FROM `TransferProduct` tp
    -> LEFT JOIN `TransferProductHolding` thd ON thd.transferProductSn = tp.sn
    -> LEFT JOIN `ClientProductHolding` hd ON hd.sn = tp.holdingSn
    -> LEFT JOIN `Client` c ON c.`sn` =  thd.clientSn 
    -> LEFT JOIN `AssignClientManager` asm ON asm.`clientSn`= c.`sn`
    -> LEFT JOIN `ProductAccess` pa ON pa.`productSn` = hd.productSn
    -> WHERE pa.`supportTransfer` =1
    -> UNION  ALL
    -> SELECT c.`sn` clientSn,asm.`clientManagerSn`,ch.productSn,3,ch.capitalBalance,ch.yieldBalance,pr.settlementDate,ch.status-1
    -> FROM `ClientHolding` ch
    -> LEFT JOIN `Client` c ON c.`sn` =  ch.clientSn 
    -> LEFT JOIN `AssignClientManager` asm ON asm.`clientSn`= c.`sn`
    -> LEFT JOIN `ProductAccess` pa ON pa.`productSn` = ch.productSn
    -> LEFT JOIN `ProductRepay` pr ON pr.`productSn` = pa.`productSn`
    -> WHERE pa.`supportTransfer` =1
    -> UNION ALL
    -> SELECT c.`sn` clientSn,asm.`clientManagerSn`,ci.productSn,1,ci.investAmount,NULL,NULL,0
    -> FROM `ClientInvestOrder` ci
    -> LEFT JOIN `Client` c ON c.`sn` =  ci.clientSn 
    -> LEFT JOIN `AssignClientManager` asm ON asm.`clientSn`= c.`sn`;
+----+--------------+----------------+--------+---------------+---------+---------+-------------------+------+----------------------------------------------------+
| id | select_type  | table          | type   | possible_keys | key     | key_len | ref               | rows | Extra                                              |
+----+--------------+----------------+--------+---------------+---------+---------+-------------------+------+----------------------------------------------------+
|  1 | PRIMARY      | pr             | ALL    | NULL          | NULL    | NULL    | NULL              | 7081 | NULL                                               |
|  1 | PRIMARY      | pa             | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.pr.productSn |    1 | Using where                                        |
|  1 | PRIMARY      | pry            | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.pr.productSn |    1 | NULL                                               |
|  1 | PRIMARY      | c              | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.pr.clientSn  |    1 | Using index                                        |
|  1 | PRIMARY      | asm            | ALL    | NULL          | NULL    | NULL    | NULL              | 4618 | Using where; Using join buffer (Block Nested Loop) |
|  2 | UNION        | tp             | ALL    | NULL          | NULL    | NULL    | NULL              |   53 | NULL                                               |
|  2 | UNION        | hd             | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.tp.holdingSn |    1 | NULL                                               |
|  2 | UNION        | pa             | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.hd.productSn |    1 | Using where                                        |
|  2 | UNION        | thd            | ALL    | NULL          | NULL    | NULL    | NULL              |   78 | Using where; Using join buffer (Block Nested Loop) |
|  2 | UNION        | c              | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.thd.clientSn |    1 | Using index                                        |
|  2 | UNION        | asm            | ALL    | NULL          | NULL    | NULL    | NULL              | 4618 | Using where; Using join buffer (Block Nested Loop) |
|  3 | UNION        | ch             | ALL    | NULL          | NULL    | NULL    | NULL              | 6426 | NULL                                               |
|  3 | UNION        | pa             | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.ch.productSn |    1 | Using where                                        |
|  3 | UNION        | pr             | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.ch.productSn |    1 | NULL                                               |
|  3 | UNION        | c              | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.ch.clientSn  |    1 | Using index                                        |
|  3 | UNION        | asm            | ALL    | NULL          | NULL    | NULL    | NULL              | 4618 | Using where; Using join buffer (Block Nested Loop) |
|  4 | UNION        | ci             | ALL    | NULL          | NULL    | NULL    | NULL              | 7258 | NULL                                               |
|  4 | UNION        | c              | eq_ref | PRIMARY       | PRIMARY | 4       | zjzc.ci.clientSn  |    1 | Using index                                        |
|  4 | UNION        | asm            | ALL    | NULL          | NULL    | NULL    | NULL              | 4618 | Using where; Using join buffer (Block Nested Loop) |
| NULL | UNION RESULT | <union1,2,3,4> | ALL    | NULL          | NULL    | NULL    | NULL              | NULL | Using temporary                                    |
+----+--------------+----------------+--------+---------------+---------+---------+-------------------+------+----------------------------------------------------+
20 rows in set (0.00 sec)


创建索引;

mysql> create index AssignClientManager_idx1 on AssignClientManager(clientSn);    
mysql> explain SELECT  c.`sn` clientSn,asm.`clientManagerSn`,pry.`productSn`,1 TYPE,pr.`capitalBalance`,pr.`yieldBalance`,pry.`realValueEndDate`,pr.`status`
    -> FROM `ProductRepayment` pr 
    -> LEFT JOIN `ProductRepay` pry ON pry.`productSn` = pr.`productSn`
    -> LEFT JOIN `ProductAccess` pa ON pa.`productSn` = pr.`productSn`
    -> LEFT JOIN `Client` c ON c.`sn` = pr.`clientSn`
    -> LEFT JOIN `AssignClientManager` asm ON asm.`clientSn`=pr.`clientSn`
    -> WHERE pa.`supportTransfer` =2
    -> UNION  ALL
    -> SELECT c.`sn` clientSn,asm.`clientManagerSn`,hd.productSn,2,thd.capitalBalance,thd.yieldBalance,thd.settlementDate,IF(thd.status =1 OR thd.status=2,1,2)
    -> FROM `TransferProduct` tp
    -> LEFT JOIN `TransferProductHolding` thd ON thd.transferProductSn = tp.sn
    -> LEFT JOIN `ClientProductHolding` hd ON hd.sn = tp.holdingSn
    -> LEFT JOIN `Client` c ON c.`sn` =  thd.clientSn 
    -> LEFT JOIN `AssignClientManager` asm ON asm.`clientSn`= c.`sn`
    -> LEFT JOIN `ProductAccess` pa ON pa.`productSn` = hd.productSn
    -> WHERE pa.`supportTransfer` =1
    -> UNION  ALL
    -> SELECT c.`sn` clientSn,asm.`clientManagerSn`,ch.productSn,3,ch.capitalBalance,ch.yieldBalance,pr.settlementDate,ch.status-1
    -> FROM `ClientHolding` ch
    -> LEFT JOIN `Client` c ON c.`sn` =  ch.clientSn 
    -> LEFT JOIN `AssignClientManager` asm ON asm.`clientSn`= c.`sn`
    -> LEFT JOIN `ProductAccess` pa ON pa.`productSn` = ch.productSn
    -> LEFT JOIN `ProductRepay` pr ON pr.`productSn` = pa.`productSn`
    -> WHERE pa.`supportTransfer` =1
    -> UNION ALL
    -> SELECT c.`sn` clientSn,asm.`clientManagerSn`,ci.productSn,1,ci.investAmount,NULL,NULL,0
    -> FROM `ClientInvestOrder` ci
    -> LEFT JOIN `Client` c ON c.`sn` =  ci.clientSn 
    -> LEFT JOIN `AssignClientManager` asm ON asm.`clientSn`= c.`sn`;
+----+--------------+----------------+--------+--------------------------+--------------------------+---------+-------------------+------+----------------------------------------------------+
| id | select_type  | table          | type   | possible_keys            | key                      | key_len | ref               | rows | Extra                                              |
+----+--------------+----------------+--------+--------------------------+--------------------------+---------+-------------------+------+----------------------------------------------------+
|  1 | PRIMARY      | pr             | ALL    | NULL                     | NULL                     | NULL    | NULL              | 7081 | NULL                                               |
|  1 | PRIMARY      | pa             | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.pr.productSn |    1 | Using where                                        |
|  1 | PRIMARY      | pry            | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.pr.productSn |    1 | NULL                                               |
|  1 | PRIMARY      | c              | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.pr.clientSn  |    1 | Using index                                        |
|  1 | PRIMARY      | asm            | ref    | AssignClientManager_idx1 | AssignClientManager_idx1 | 4       | zjzc.pr.clientSn  |    1 | NULL                                               |
|  2 | UNION        | tp             | ALL    | NULL                     | NULL                     | NULL    | NULL              |   53 | NULL                                               |
|  2 | UNION        | hd             | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.tp.holdingSn |    1 | NULL                                               |
|  2 | UNION        | pa             | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.hd.productSn |    1 | Using where                                        |
|  2 | UNION        | thd            | ALL    | NULL                     | NULL                     | NULL    | NULL              |   78 | Using where; Using join buffer (Block Nested Loop) |
|  2 | UNION        | c              | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.thd.clientSn |    1 | Using index                                        |
|  2 | UNION        | asm            | ref    | AssignClientManager_idx1 | AssignClientManager_idx1 | 4       | zjzc.c.sn         |    1 | NULL                                               |
|  3 | UNION        | ch             | ALL    | NULL                     | NULL                     | NULL    | NULL              | 6426 | NULL                                               |
|  3 | UNION        | pa             | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.ch.productSn |    1 | Using where                                        |
|  3 | UNION        | pr             | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.ch.productSn |    1 | NULL                                               |
|  3 | UNION        | c              | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.ch.clientSn  |    1 | Using index                                        |
|  3 | UNION        | asm            | ref    | AssignClientManager_idx1 | AssignClientManager_idx1 | 4       | zjzc.c.sn         |    1 | NULL                                               |
|  4 | UNION        | ci             | ALL    | NULL                     | NULL                     | NULL    | NULL              | 7258 | NULL                                               |
|  4 | UNION        | c              | eq_ref | PRIMARY                  | PRIMARY                  | 4       | zjzc.ci.clientSn  |    1 | Using index                                        |
|  4 | UNION        | asm            | ref    | AssignClientManager_idx1 | AssignClientManager_idx1 | 4       | zjzc.c.sn         |    1 | NULL                                               |
| NULL | UNION RESULT | <union1,2,3,4> | ALL    | NULL                     | NULL                     | NULL    | NULL              | NULL | Using temporary                                    |
+----+--------------+----------------+--------+--------------------------+--------------------------+---------+-------------------+------+----------------------------------------------------+
20 rows in set (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scan724

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值