Mysql SQL 性能优化

2019-04-23  本文已影响0人  赛亚人之神
explain EXTENDED  SELECT t.id           AS trade_id,
       t.trade_no,
       t.gmt_create   AS order_time,
       t.gmt_modified AS cancel_time,
       IF(t.status = 7, TIMESTAMPDIFF(SECOND, t.gmt_create, NOW()), '') AS countDownSecond,
       IFNULL(ti.deal_price, 0) - IFNULL((SELECT IFNULL(SUM(IFNULL(tp.remit_price, 0)),0) FROM trade_payment tp WHERE tp.trade_id = t.id), 0) AS unpaidAmount,
       ti.deal_price,
       ti.data_validity,
       t.status,
       t.payment_type,
       ti.product_id,
       t.source,
       t.type,
       p.id           AS product_id,
       p.name         AS product_name,
       p.image        AS product_image,
       p.type         AS product_type,
       p.product_price
    FROM trade t
           INNER JOIN trade_info ti ON t.id = ti.trade_id
           LEFT JOIN product p ON p.id = ti.product_id
    WHERE t.is_delete = 0
      AND ti.is_delete = 0
      AND t.customer_id='193e45f7efdf43648e523832fad75c54'
    ORDER BY t.gmt_create DESC;
SHOW WARNINGS ;

显示出可优化的sql,进行优化即可,假设 trade, trade_info 各50w数据

/* select#1 */ select `t`.`id`                                                                          AS `trade_id`,
                      `t`.`trade_no`                                                                    AS `trade_no`,
                      `t`.`gmt_create`                                                                  AS `order_time`,
                      `t`.`gmt_modified`                                                                AS `cancel_time`,
                      if((`t`.`status` = 7), timestampdiff(SECOND, `t`.`gmt_create`, now()),
                         '')                                                                                   AS `countDownSecond`,
                      (ifnull(`ti`.`deal_price`, 0) -
                       ifnull((/* select#2 */ select ifnull(sum(ifnull(`tp`.`remit_price`, 0)), 0)
                                              from `trade_payment` `tp`
                                              where (`tp`.`trade_id` = `t`.`id`)),
                              0))                                                                              AS `unpaidAmount`,
                      `ti`.`deal_price`                                                                 AS `deal_price`,
                      `ti`.`data_validity`                                                              AS `data_validity`,
                      `t`.`status`                                                                      AS `status`,
                      `t`.`payment_type`                                                                AS `payment_type`,
                      `ti`.`product_id`                                                                 AS `product_id`,
                      `t`.`source`                                                                      AS `source`,
                      `t`.`type`                                                                        AS `type`,
                      `p`.`id`                                                                          AS `product_id`,
                      `p`.`name`                                                                        AS `product_name`,
                      `p`.`image`                                                                       AS `product_image`,
                      `p`.`type`                                                                        AS `product_type`,
                      `p`.`product_price`                                                               AS `product_price`
               from `trade` `t`
                      join `trade_info` `ti`
                      left join `product` `p` on ((`p`.`id` = `ti`.`product_id`))
               where ((`ti`.`trade_id` = `t`.`id`) and (`ti`.`is_delete` = 0) and
                      (`t`.`is_delete` = 0) and (`t`.`customer_id` = '193e45f7efdf43648e523832fad75c54'))
               order by `t`.`gmt_create` desc
上一篇下一篇

猜你喜欢

热点阅读