任务描述

1.问题分析

   华为云gaussdb 及时销量慢sql, 执行时间87.653

   分析发现问题点:

   A. count 查询 去掉其他字段的查询,只保留`a`.`asin`;

   B. count查询where条件用到的都是a表的字段,输出字段也是a表的asin,可以去掉left查询;

   C.测试优化前在执行需13秒,查询到8125行,优化后 1.9秒,查询到8125行数据,结果是一样的。

2.解决方案

   A.去掉多余的输出字段,只保留`a`.`asin`

   B.去掉left 查询


优化后的sql:

SELECT COUNT(1)
FROM (
SELECT  `a`.`asin`
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 `a`.`asin`
) CountTable;


3.慢sql


SELECT COUNT(1)
FROM (
SELECT `c`.`image_url` AS `url`, `a`.`asin` AS `asin`, `a`.`currency` AS `currency`, `b`.`ParentAsin` AS `parentAsin`, `a`.`sku` AS `sku`
, `c`.`erp_sku` AS `erpSku`, `c`.`client_sku` AS `clientSku`, `a`.`sale_shop_id` AS `shopId`, `c`.`product_brand_id` AS `brandId`, `c`.`product_category3_id` AS `categoryId`
, `a`.`product_name` AS `title`, `c`.`product_name_zh` AS `name`
, SUM(CASE 
WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb`
WHEN 'usd' = 'usd' THEN `a`.`item_price` * `a`.`exchange_usd`
ELSE `a`.`item_price`
END) AS `saleAmount`
, SUM(`a`.`item_price` * `a`.`exchange_usd`) AS `saleAmountUSD`
, COUNT(`a`.`amazon_order_id`) AS `orderNum`, SUM(`a`.`quantity`) AS `saleNum`
, SUM(CASE 
WHEN 'usd' = 'rmb' THEN `a`.`item_price` * `a`.`exchange_rmb`
WHEN 'usd' = 'usd' THEN `a`.`item_price` * `a`.`exchange_usd`
WHEN 'usd' = 'original' THEN `a`.`item_price`
ELSE 0
END) AS `evSaleAmount`
, COUNT(CASE 
WHEN `e`.`amazon_order_id` IS NOT NULL THEN `a`.`amazon_order_id`
ELSE 0
END) AS `evOrderNum`
, SUM(CASE 
WHEN `e`.`amazon_order_id` IS NOT NULL THEN `a`.`quantity`
ELSE 0
END) AS `evSaleNum`
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 `product` c ON `c`.`erp_sku` = `b`.`Sku`
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 `a`.`asin`
) CountTable;

//8125  12秒

/8125   1.9秒

历史记录  
  1. 2022-07-04 15:28:46, 由 陈少军 创建。
  2. 2022-07-04 15:29:16, 由 陈少军 编辑。
    修改了 任务名称,区别为:
    001- 【虎鲸-及时销量慢sql】
    001+ 【虎鲸-及时销量慢sql】count 慢sql查询优化
    001- 【虎鲸-及时销量慢sql】
    001+ 【虎鲸-及时销量慢sql】count 慢sql查询优化
    修改了 任务描述,区别为:
    013- SELECT COUNT(1)FROM ( SELECT `a`.`asin` FROM `all_orders_data_by_last_update` a 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 `a`.`asin`) CountTable;
    013+ SELECT COUNT(1)FROM ( SELECT `a`.`asin` FROM `all_orders_data_by_last_update` a 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 `a`.`asin`) CountTable;
    018- /8125 1.9秒
    018+ /8125 1.9秒
    013- <p>SELECT COUNT(1)<br />FROM (<br /><span> </span>SELECT `a`.`asin`<br /><span> </span>FROM `all_orders_data_by_last_update` a<br /><span> </span>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 /><span> </span>GROUP BY `a`.`asin`<br />) CountTable;<br /></p>
    013+ <p>SELECT COUNT(1)<br />FROM (<br /><span> </span>SELECT `a`.`asin`<br /><span> </span>FROM `all_orders_data_by_last_update` a<br /><span> </span>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 /><span> </span>GROUP BY `a`.`asin`<br />) CountTable;</p>
    018- <p>/8125 1.9秒<br /></p>
    018+ <p>/8125 1.9秒</p>
  3. 2022-07-04 15:29:28, 由 陈少军 指派给 王翔宇。
    修改了 预计剩余,旧值为 "0",新值为 "2"。
    参考解决方案优化
  4. 2022-07-08 09:49:57, 由 夏宇 移动,之前为 "#626 系统管理部 - 系统服务优化 "。
  5. 2022-07-25 10:25:46, 由 夏宇 编辑。
    修改了 所属迭代,旧值为 "637",新值为 "626"。
  6. 2022-07-27 17:12:07, 由 王翔宇 完成。
    修改了 总计消耗,旧值为 "0",新值为 "3"。
    修改了 指派给 ,旧值为 "wangxiangyu",新值为 "chenshaojun"。
    修改了 实际完成,旧值为 "",新值为 "2022-07-27 17:09:57"。
    修改了 任务状态,旧值为 "wait",新值为 "done"。
    修改了 实际开始,旧值为 "0000-00-00 00:00:00",新值为 "2022-07-27 17:12:07"。
    修改了 预计剩余,旧值为 "2",新值为 "0"。
    修改了 由谁完成,旧值为 "",新值为 "wangxiangyu"。

    把原来ToPageList方法,拆成两部分,分开执行,避免生成多余字段的SQL。


    Left join 语法参考【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 15:28:46
由谁完成 王翔宇 于 2022-07-27 17:09:57
由谁取消 暂无
由谁关闭 周杰 于 2023-10-31 14:53:12
关闭原因 已完成
最后编辑 周杰 于 2023-10-31 14:53:12
团队 最初预计 总计消耗 预计剩余
工时信息
最初预计 0工时
总计消耗 3工时
预计剩余 0工时
预计开始 2022-07-04
实际开始 2022-07-27
截止日期 2022-07-11