反馈人 李冠
严重级别:严重
所属项目:亚马逊-百货
问题原因:慢SQL,严重影响公共库其它业务正常运行,SQL为:(
with tmp_monitor_sale as (
select 'OR-OR-WF-Pink' msku, 16332 source_id
)
SELECT
sale.msku,
sale.source_id,
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 6 - 2 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "saleNum7",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 13 - 2 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "saleNum14",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 27 - 2 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "saleNum28",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 30 - 2 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "saleNum30",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 59 - 2 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "saleNum60",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 89 - 2 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "saleNum90",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 119 - 2 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "saleNum120",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 179 - 2 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "saleNum180",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 6 - 2 - 364 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 - 364 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "yoySaleNum7",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 13 - 2 - 364 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 - 364 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "yoySaleNum14",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 29 - 2 - 364 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 - 364 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "yoySaleNum30",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 59 - 2 - 364 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 - 364 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "yoySaleNum60",
sum( CASE WHEN ( purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 89 - 2 - 364 DAY ), '%Y%m%d' ) AS UNSIGNED ) AND purchase_date_day <= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 2 - 364 DAY ),'%Y%m%d' ) AS UNSIGNED )) THEN quantity_ordered ELSE 0 END ) "yoySaleNum90"
FROM
t_amazon_sales_5 sale inner join tmp_monitor_sale tmp on sale.source_id = tmp.source_id and sale.msku = tmp.msku
where
sale.purchase_date_day >= cast( DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL - 364 - 2 - 365 DAY ), '%Y%m%d' ) AS UNSIGNED )
AND sale.order_status IN ( 1, 2, 3, 4 )
GROUP BY msku, source_id)
解决方案:建议分析一下业务,换一种方式实现,避免每次都几乎全量统计
重现步骤
目前已经指定单个source_id,msku维度做销量汇总,但是有品的listing订单量比较大,存在扫描的行数200W+行