任务描述

1.问题分析

从华为云虎鲸-及时销量gaussdb 抓取的慢sql,华为云记录查询时间需78秒

分析sql发现 查询输出的字段和where条件的字段都是a表里的字段,所以可以去掉left查询


优化前 查询输出3010行记录用时7秒,优化后查询输出3010行记录用时2.5秒


//7   3010 rows
//2.5 3010 rows


2.解决方案

 优化后的sql, 去掉left查询

SELECT CAST(DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00') AS DATETIME) AS `paymentTime`
, SUM(CASE 
WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb`
ELSE `a`.`item_price` * `a`.`exchange_usd`
END) AS `saleAmount`
, COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`
FROM `all_orders_data_by_last_update` a
WHERE `a`.`purchase_date` >= '2022-03-01 00:00:00'
AND `a`.`purchase_date` <= '2022-07-04 23:59:59'
AND `a`.`sale_shop_id` > 0
AND (`a`.`order_status` <> 'Cancelled'
AND `a`.`is_multi_channel_fulfillment` = 0)
GROUP BY DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00');

//7   3010 rows
//2.5 3010 rows


3.慢sql


SELECT CAST(DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00') AS DATETIME) AS `paymentTime`
, SUM(CASE 
WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb`
ELSE `a`.`item_price` * `a`.`exchange_usd`
END) AS `saleAmount`
, COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`
FROM `all_orders_data_by_last_update` a
LEFT JOIN `Amazon_Listing` b
ON `b`.`OrderSourceSku` = `a`.`sku`
AND `b`.`OrderSourceId` = `a`.`sale_shop_id`
LEFT JOIN `evaluation_order` e ON `e`.`amazon_order_id` = `a`.`amazon_order_id`
WHERE `a`.`purchase_date` >= '2022-03-01 00:00:00'
AND `a`.`purchase_date` <= '2022-07-04 23:59:59'
AND `a`.`sale_shop_id` > 0
AND (`a`.`order_status` <> 'Cancelled'
AND `a`.`is_multi_channel_fulfillment` = 0)
GROUP BY DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00');

//7   3010 rows
//2.5 3010 rows

历史记录  
  1. 2022-07-04 16:19:24, 由 陈少军 创建。
  2. 2022-07-04 16:19:44, 由 陈少军 指派给 王翔宇。
    修改了 预计剩余,旧值为 "0",新值为 "2"。
    参考解决方案优化
  3. 2022-07-04 16:21:01, 由 陈少军 编辑。
    修改了 任务描述,区别为:
    002- 从华为云虎鲸-及时销量gaussdb 抓取的慢sql
    002+ 从华为云虎鲸-及时销量gaussdb 抓取的慢sql,华为云记录查询时间需78秒
    007- //7 3010 rows//2.5 3010 rows
    007+ //7 3010 rows//2.5 3010 rows
    011- SELECT CAST(DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00') AS DATETIME) AS `paymentTime` , SUM(CASE WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb` ELSE `a`.`item_price` * `a`.`exchange_usd` END) AS `saleAmount` , COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`FROM `all_orders_data_by_last_update` aWHERE `a`.`purchase_date` &gt;= '2022-03-01 00:00:00' AND `a`.`purchase_date` &lt;= '2022-07-04 23:59:59' AND `a`.`sale_shop_id` &gt; 0 AND (`a`.`order_status` &lt;&gt; 'Cancelled' AND `a`.`is_multi_channel_fulfillment` = 0)GROUP BY DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00');//7 3010 rows//2.5 3010 rows
    011+ SELECT CAST(DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00') AS DATETIME) AS `paymentTime` , SUM(CASE WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb` ELSE `a`.`item_price` * `a`.`exchange_usd` END) AS `saleAmount` , COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`FROM `all_orders_data_by_last_update` aWHERE `a`.`purchase_date` &gt;= '2022-03-01 00:00:00' AND `a`.`purchase_date` &lt;= '2022-07-04 23:59:59' AND `a`.`sale_shop_id` &gt; 0 AND (`a`.`order_status` &lt;&gt; 'Cancelled' AND `a`.`is_multi_channel_fulfillment` = 0)GROUP BY DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00');//7 3010 rows//2.5 3010 rows
    014- SELECT CAST(DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00') AS DATETIME) AS `paymentTime` , SUM(CASE WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb` ELSE `a`.`item_price` * `a`.`exchange_usd` END) AS `saleAmount` , COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`FROM `all_orders_data_by_last_update` a LEFT JOIN `Amazon_Listing` b ON `b`.`OrderSourceSku` = `a`.`sku` AND `b`.`OrderSourceId` = `a`.`sale_shop_id` LEFT JOIN `evaluation_order` e ON `e`.`amazon_order_id` = `a`.`amazon_order_id`WHERE `a`.`purchase_date` &gt;= '2022-03-01 00:00:00' AND `a`.`purchase_date` &lt;= '2022-07-04 23:59:59' AND `a`.`sale_shop_id` &gt; 0 AND (`a`.`order_status` &lt;&gt; 'Cancelled' AND `a`.`is_multi_channel_fulfillment` = 0)GROUP BY DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00');//7 3010 rows//2.5 3010 rows
    014+ SELECT CAST(DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00') AS DATETIME) AS `paymentTime` , SUM(CASE WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb` ELSE `a`.`item_price` * `a`.`exchange_usd` END) AS `saleAmount` , COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`FROM `all_orders_data_by_last_update` a LEFT JOIN `Amazon_Listing` b ON `b`.`OrderSourceSku` = `a`.`sku` AND `b`.`OrderSourceId` = `a`.`sale_shop_id` LEFT JOIN `evaluation_order` e ON `e`.`amazon_order_id` = `a`.`amazon_order_id`WHERE `a`.`purchase_date` &gt;= '2022-03-01 00:00:00' AND `a`.`purchase_date` &lt;= '2022-07-04 23:59:59' AND `a`.`sale_shop_id` &gt; 0 AND (`a`.`order_status` &lt;&gt; 'Cancelled' AND `a`.`is_multi_channel_fulfillment` = 0)GROUP BY DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00');//7 3010 rows//2.5 3010 rows
    002- <p>从华为云虎鲸-及时销量gaussdb 抓取的慢sql</p>
    002+ <p>从华为云虎鲸-及时销量gaussdb 抓取的慢sql,华为云记录查询时间需78秒</p>
    007- <p>//7 3010 rows<br />//2.5 3010 rows<br /></p>
    007+ <p>//7 3010 rows<br />//2.5 3010 rows</p>
    011- <p>SELECT CAST(DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00') AS DATETIME) AS `paymentTime`<br /><span> </span>, SUM(CASE<br /><span> </span>WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb`<br /><span> </span>ELSE `a`.`item_price` * `a`.`exchange_usd`<br /><span> </span>END) AS `saleAmount`<br /><span> </span>, COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`<br />FROM `all_orders_data_by_last_update` a<br />WHERE `a`.`purchase_date` &gt;= '2022-03-01 00:00:00'<br /><span> </span>AND `a`.`purchase_date` &lt;= '2022-07-04 23:59:59'<br /><span> </span>AND `a`.`sale_shop_id` &gt; 0<br /><span> </span>AND (`a`.`order_status` &lt;&gt; 'Cancelled'<br /><span> </span>AND `a`.`is_multi_channel_fulfillment` = 0)<br />GROUP BY DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00');<br /><br />//7 3010 rows<br />//2.5 3010 rows<br /></p>
    011+ <p>SELECT CAST(DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00') AS DATETIME) AS `paymentTime`<br /><span> </span>, SUM(CASE<br /><span> </span>WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb`<br /><span> </span>ELSE `a`.`item_price` * `a`.`exchange_usd`<br /><span> </span>END) AS `saleAmount`<br /><span> </span>, COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`<br />FROM `all_orders_data_by_last_update` a<br />WHERE `a`.`purchase_date` &gt;= '2022-03-01 00:00:00'<br /><span> </span>AND `a`.`purchase_date` &lt;= '2022-07-04 23:59:59'<br /><span> </span>AND `a`.`sale_shop_id` &gt; 0<br /><span> </span>AND (`a`.`order_status` &lt;&gt; 'Cancelled'<br /><span> </span>AND `a`.`is_multi_channel_fulfillment` = 0)<br />GROUP BY DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00');<br /><br />//7 3010 rows<br />//2.5 3010 rows</p>
    014- <p><br />SELECT CAST(DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00') AS DATETIME) AS `paymentTime`<br /><span> </span>, SUM(CASE<br /><span> </span>WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb`<br /><span> </span>ELSE `a`.`item_price` * `a`.`exchange_usd`<br /><span> </span>END) AS `saleAmount`<br /><span> </span>, COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`<br />FROM `all_orders_data_by_last_update` a<br /><span> </span>LEFT JOIN `Amazon_Listing` b<br /><span> </span>ON `b`.`OrderSourceSku` = `a`.`sku`<br /><span> </span>AND `b`.`OrderSourceId` = `a`.`sale_shop_id`<br /><span> </span>LEFT JOIN `evaluation_order` e ON `e`.`amazon_order_id` = `a`.`amazon_order_id`<br />WHERE `a`.`purchase_date` &gt;= '2022-03-01 00:00:00'<br /><span> </span>AND `a`.`purchase_date` &lt;= '2022-07-04 23:59:59'<br /><span> </span>AND `a`.`sale_shop_id` &gt; 0<br /><span> </span>AND (`a`.`order_status` &lt;&gt; 'Cancelled'<br /><span> </span>AND `a`.`is_multi_channel_fulfillment` = 0)<br />GROUP BY DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00');<br /><br />//7 3010 rows<br />//2.5 3010 rows<br /></p>
    014+ <p><br />SELECT CAST(DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00') AS DATETIME) AS `paymentTime`<br /><span> </span>, SUM(CASE<br /><span> </span>WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb`<br /><span> </span>ELSE `a`.`item_price` * `a`.`exchange_usd`<br /><span> </span>END) AS `saleAmount`<br /><span> </span>, COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`<br />FROM `all_orders_data_by_last_update` a<br /><span> </span>LEFT JOIN `Amazon_Listing` b<br /><span> </span>ON `b`.`OrderSourceSku` = `a`.`sku`<br /><span> </span>AND `b`.`OrderSourceId` = `a`.`sale_shop_id`<br /><span> </span>LEFT JOIN `evaluation_order` e ON `e`.`amazon_order_id` = `a`.`amazon_order_id`<br />WHERE `a`.`purchase_date` &gt;= '2022-03-01 00:00:00'<br /><span> </span>AND `a`.`purchase_date` &lt;= '2022-07-04 23:59:59'<br /><span> </span>AND `a`.`sale_shop_id` &gt; 0<br /><span> </span>AND (`a`.`order_status` &lt;&gt; 'Cancelled'<br /><span> </span>AND `a`.`is_multi_channel_fulfillment` = 0)<br />GROUP BY DATE_FORMAT(`a`.`purchase_date`, '%Y-%m-%d %H:00:00');<br /><br />//7 3010 rows<br />//2.5 3010 rows</p>
  4. 2022-07-08 09:49:57, 由 夏宇 移动,之前为 "#626 系统管理部 - 系统服务优化 "。
  5. 2022-07-25 10:25:06, 由 夏宇 编辑。
    修改了 所属迭代,旧值为 "637",新值为 "626"。
  6. 2022-07-27 15:47:55, 由 王翔宇 完成。
    修改了 总计消耗,旧值为 "0",新值为 "1"。
    修改了 指派给 ,旧值为 "wangxiangyu",新值为 "chenshaojun"。
    修改了 实际完成,旧值为 "",新值为 "2022-07-27 15:47:15"。
    修改了 任务状态,旧值为 "wait",新值为 "done"。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2022-07-27 15:47:55"。
    修改了 预计剩余,旧值为 "2",新值为 "0"。
    修改了 由谁完成,旧值为 "",新值为 "wangxiangyu"。
    参考“29235 【华为虎鲸-及时销量慢sql优化】多列慢sql查询去掉不必要的left ” ,是一样的逻辑出来
  7. 2023-10-31 14:53:12, 由 周杰 关闭。
    修改了 任务状态,旧值为 "done",新值为 "closed"。
    修改了 指派给 ,旧值为 "chenshaojun",新值为 "closed"。
    修改了 由谁关闭,旧值为 "",新值为 "zhoujie"。
    修改了 关闭时间,旧值为 "0000-00-00 00:00:00",新值为 "2023-10-31 14:53:12"。
    修改了 关闭原因,旧值为 "",新值为 "done"。
所属迭代 系统管理部 - 系统服务优化
所属模块 /
相关需求 暂无
指派给 Closed 于 2023-10-31 14:53:12
任务类型 后端
任务标签 初始
开发组
任务状态 已关闭
进度 100%
优先级 P2
关键词
抄送给 罗友军
由谁创建 陈少军 于 2022-07-04 16:19:24
由谁完成 王翔宇 于 2022-07-27 15:47:15
由谁取消 暂无
由谁关闭 周杰 于 2023-10-31 14:53:12
关闭原因 已完成
最后编辑 周杰 于 2023-10-31 14:53:12
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 0工时
总计消耗 1工时
预计剩余 0工时
预计开始 2022-07-04
实际开始 2022-07-27
截止日期 2022-07-11