数据库:zhcxkj_center_adv_amazon
查询时间:14.9769
扫描行数:703.807
发送行数:351.904
指纹SQL: with tem as ( select DISTINCT source_id , ad_id , ad_group_id , campaign_id , asin , portfolio_id , sku as msku , site_hour from ( select p . source_id , p . ad_id , p . ad_group_id , p . campaign_id , p . asin , g . portfolio_id , p . sku , cv . site_hour FROM ? p left join t_sp_ad_campaign g on p . source_id = g . source_id and p . campaign_id = g . campaign_id left join t_amazon_sp_advertisement cv on p . ad_id COLLATE utf8mb4_general_ci = cv . ad_id and p . ad_group_id COLLATE utf8mb4_general_ci = cv . ad_group_id and p . campaign_id COLLATE utf8mb4_general_ci = cv . campaign_id where p . source_id = ? and cv . own_hour >= ? and cv . own_hour <= ? and cv . site_date >= ? UNION all select p . source_id , p . ad_id , p . ad_group_id , p . campaign_id , p . asin , g . portfolio_id , p . sku , cv . site_hour FROM ? p left join t_sp_ad_campaign g on p . source_id = g . source_id and p . campaign_id = g . campaign_id left join t_amazon_sp_ad_traffic cv on p . ad_id COLLATE utf8mb4_general_ci = cv . ad_id and p . ad_group_id COLLATE utf8mb4_general_ci = cv . ad_group_id and p . campaign_id COLLATE utf8mb4_general_ci = cv . campaign_id where p . source_id = ? and cv . own_hour >= ? and cv . own_hour <= ? and cv . site_date >= ? ) t order by ad_id , site_hour , msku limit ? offset ? ) select t1 . customer_id , t1 . report_day , t1 . report_hour , t1 . ad_type , t1 . source_id , t1 . msku , t1 . ad_id , t1 . ad_group_id , t1 . campaign_id , t1 . site_hour , t1 . asin , t1 . portfolio_id , IFNULL ( t1 . currency , t2 . currency ) as currency , t2 . cost , t2 . impressions , t2 . clicks , t1 . attributedConversions1d , t1 . attributedConversions7d , t1 . attributedConversions14d , t1 . attributedConversions30d , t1 . attributedConversions1dSameMsku , t1 . attributedConversions7dSameMsku , t1 . attributedConversions14dSameMsku , t1 . attributedConversions30dSameMsku , t1 . attributedSales1d , t1 . attributedSales7d , t1 . attributedSales14d ,
真实SQL:with tem as ( select DISTINCT source_id, ad_id, ad_group_id, campaign_id,asin,portfolio_id, sku as msku ,site_hour from( select p.source_id, p.ad_id, p.ad_group_id, p.campaign_id,p.asin,g.portfolio_id,p.sku, cv.site_hour from t_sp_ad_product p left join t_sp_ad_campaign g on p.source_id = g.source_id and p.campaign_id = g.campaign_id left join t_amazon_sp_advertisement cv on p.ad_id COLLATE utf8mb4_general_ci = cv.ad_id and p.ad_group_id COLLATE utf8mb4_general_ci = cv.ad_group_id and p.campaign_id COLLATE utf8mb4_general_ci = cv.campaign_id where p.source_id = 16549 and cv.own_hour >= 2025080405 and cv.own_hour <= 2025080408 and cv.site_date >= 2025-06-10 UNION all select p.source_id, p.ad_id, p.ad_group_id, p.campaign_id,p.asin,g.portfolio_id,p.sku,cv.site_hour from t_sp_ad_product p left join t_sp_ad_campaign g on p.source_id = g.source_id and p.campaign_id = g.campaign_id left join t_amazon_sp_ad_traffic cv on p.ad_id COLLATE utf8mb4_general_ci = cv.ad_id and p.ad_group_id COLLATE utf8mb4_general_ci = cv.ad_group_id and p.campaign_id COLLATE utf8mb4_general_ci = cv.campaign_id where p.source_id = 16549 and cv.own_hour >= 2025080405 and cv.own_hour <= 2025080408 and cv.site_date >= 2025-06-10 ) t order by ad_id, site_hour, msku limit 1000 offset 0 ) select t1.customer_id, t1.report_day, t1.report_hour, t1.ad_type, t1.source_id, t1.msku, t1.ad_id, t1.ad_group_id, t1.campaign_id, t1.site_hour, t1.asin, t1.portfolio_id, IFNULL(t1.currency, t2.currency) as currency, t2.cost, t2.impressions, t2.clicks, t1.attributedConversions1d, t1.attributedConversions7d, t1.attributedConversions14d, t1.attributedConversions30d, t1.attributedConversions1dSameMsku, t1.attributedConversions7dSameMsku, t1.attributedConversions14dSameMsku, t1.attributedConversions30dSameMsku, t1.attributedSales1d, t1.attributedSales7d, t1.attributedSales14d, t1.attributedSales30d, t1.attributedSales1dSameMsku, t1.attributedSales7dSameMsku, t1.attributedSales14dSameMsku, t1.attributedSales30dSameMsku, t1.attributedUnitsOrdered1d, t1.attributedUnitsOrdered7d, t1.attributedUnitsOrdered14d, t1.attributedUnitsOrdered30d, t1.attributedUnitsOrdered1dSameMsku, t1.attributedUnitsOrdered7dSameMsku, t1.attributedUnitsOrdered14dSameMsku, t1.attributedUnitsOrdered30dSameMsku from ( select 1 as customer_id, DATE_FORMAT(STR_TO_DATE(tem.site_hour, %Y%m%d%H), %Y-%m-%d) as report_day, DATE_FORMAT(STR_TO_DATE(tem.site_hour, %Y%m%d%H), %H) as report_hour, 0 as ad_type, tem.source_id, tem.msku, tem.ad_id, tem.ad_group_id, tem.campaign_id, tem.site_hour, tem.asin, tem.portfolio_id, min(cv1.currency) as currency, sum(cv1.attributed_conversions_1d) as attributedConversions1d, sum(cv1.attributed_conversions_7d) as attributedConversions7d, sum(cv1.attributed_conversions_14d) as attributedConversions14d, sum(cv1.attributed_conversions_30d) as attributedConversions30d, sum(cv1.attributed_conversions_1d_same_sku) as attributedConversions1dSameMsku, sum(cv1.attributed_conversions_7d_same_sku) as attributedConversions7dSameMsku, sum(cv1.attributed_conversions_14d_same_sku) as attributedConversions14dSameMsku, sum(cv1.attributed_conversions_30d_same_sku) as attributedConversions30dSameMsku, sum(cv1.attributed_sales_1d) as attributedSales1d, sum(cv1.attributed_sales_7d) as attributedSales7d, sum(cv1.attributed_sales_14d) as attributedSales14d, sum(cv1.attributed_sales_30d) as attributedSales30d, sum(cv1.attributed_sales_1d_same_sku) as attributedSales1dSameMsku, sum(cv1.attributed_sales_7d_same_sku) as attributedSales7dSameMsku, sum(cv1.attributed_sales_14d_same_sku) as attributedSales14dSameMsku, sum(cv1.attributed_sales_30d_same_sku) as attributedSales30dSameMsku, sum(cv1.attributed_units_ordered_1d) as attributedUnitsOrdered1d, sum(cv1.attributed_units_ordered_7d) as attributedUnitsOrdered7d, sum(cv1.attributed_units_ordered_14d) as attributedUnitsOrdered14d, sum(cv1.attributed_units_ordered_30d) as attributedUnitsOrdered30d, sum(cv1.attributed_units_ordered_1d_same_sku) as attributedUnitsOrdered1dSameMsku, sum(cv1.attributed_units_ordered_7d_same_sku) as attributedUnitsOrdered7dSameMsku, sum(cv1.attributed_units_ordered_14d_same_sku) as attributedUnitsOrdered14dSameMsku, sum(cv1.attributed_units_ordered_30d_same_sku) as attributedUnitsOrdered30dSameMsku from tem left join t_amazon_sp_advertisement cv1 on tem.ad_id COLLATE utf8mb4_general_ci = cv1.ad_id and tem.ad_group_id COLLATE utf8mb4_general_ci = cv1.ad_group_id and tem.campaign_id COLLATE utf8mb4_general_ci = cv1.campaign_id and tem.site_hour = cv1.site_hour group by tem.source_id, tem.msku, tem.ad_id, tem.ad_group_id, tem.campaign_id, tem.site_hour,tem.asin, tem.portfolio_id ) t1 left join ( select 1 as customer_id, DATE_FORMAT(STR_TO_DATE(tem.site_hour, %Y%m%d%H), %Y-%m-%d) as report_day, DATE_FORMAT(STR_TO_DATE(tem.site_hour, %Y%m%d%H), %H) as report_hour, 0 as ad_type, tem.source_id, tem.msku, tem.ad_id, tem.ad_group_id, tem.campaign_id, tem.site_hour, tem.asin, tem.portfolio_id, min(tf1.currency) as currency, sum(tf1.cost) as cost, sum(tf1.impressions) as impressions, sum(tf1.clicks) as clicks from tem left join t_amazon_sp_ad_traffic tf1 on tem.ad_id COLLATE utf8mb4_general_ci = tf1.ad_id and tem.ad_group_id COLLATE utf8mb4_general_ci = tf1.ad_group_id and tem.campaign_id COLLATE utf8mb4_general_ci = tf1.campaign_id and tem.site_hour = tf1.site_hour group by tem.source_id, tem.msku, tem.ad_id, tem.ad_group_id, tem.campaign_id, tem.site_hour,tem.asin, tem.portfolio_id ) t2 on t1.campaign_id=t2.campaign_id and t1.ad_group_id=t2.ad_group_id and t1.ad_id = t2.ad_id and t1.site_hour = t2.site_hour and t1.source_id=t2.source_id and t1.msku = t2.msku;
袁慧斌,人工修改过
AISQL修改建议:优化后的SQL如下:
WITH tem AS (
SELECT DISTINCT
p.source_id,
p.ad_id,
p.ad_group_id,
p.campaign_id,
p.asin,
g.portfolio_id,
p.sku AS msku,
cv.site_hour
FROM t_sp_ad_product p
JOIN t_sp_ad_campaign g ON p.source_id = g.source_id AND p.campaign_id = g.campaign_id
JOIN (
SELECT ad_id, ad_group_id, campaign_id, site_hour
FROM t_amazon_sp_advertisement
WHERE own_hour BETWEEN 2025080405 AND 2025080408 AND site_date >= 2025-06-10
UNION ALL
SELECT ad_id, ad_group_id, campaign_id, site_hour
FROM t_amazon_sp_ad_traffic
WHERE own_hour BETWEEN 2025080405 AND 2025080408 AND site_date >= 2025-06-10
) cv ON p.ad_id = cv.ad_id AND p.ad_group_id = cv.ad_group_id AND p.campaign_id = cv.campaign_id
WHERE p.source_id = 16549
ORDER BY p.ad_id, cv.site_hour, p.sku
LIMIT 1000
)
SELECT
t1.customer_id,
t1.report_day,
t1.report_hour,
t1.ad_type,
t1.source_id,
t1.msku,
t1.ad_id,
t1.ad_group_id,
t1.campaign_id,
t1.site_hour,
t1.asin,
t1.portfolio_id,
IFNULL(t1.currency, t2.currency) AS currency,
t2.cost,
t2.impressions,
t2.clicks,
t1.attributedConversions1d,
t1.attributedConversions7d,
t1.attributedConversions14d,
t1.attributedConversions30d,
t1.attributedConversions1dSameMsku,
t1.attributedConversions7dSameMsku,
t1.attributedConversions14dSameMsku,
t1.attributedConversions30dSameMsku,
t1.attributedSales1d,
t1.attributedSales7d,
t1.attributedSales14d,
t1.attributedSales30d,
t1.attributedSales1dSameMsku,
t1.attributedSales7dSameMsku,
t1.attributedSales14dSameMsku,
t1.attributedSales30dSameMsku,
t1.attributedUnitsOrdered1d,
t1.attributedUnitsOrdered7d,
t1.attributedUnitsOrdered14d,
t1.attributedUnitsOrdered30d,
t1.attributedUnitsOrdered1dSameMsku,
t1.attributedUnitsOrdered7dSameMsku,
t1.attributedUnitsOrdered14dSameMsku,
t1.attributedUnitsOrdered30dSameMsku
FROM (
SELECT
1 AS customer_id,
DATE_FORMAT(STR_TO_DATE(tem.site_hour, %Y%m%d%H), %Y-%m-%d) AS report_day,
DATE_FORMAT(STR_TO_DATE(tem.site_hour, %Y%m%d%H), %H) AS report_hour,
0 AS ad_type,
tem.source_id,
tem.msku,
tem.ad_id,
tem.ad_group_id,
tem.campaign_id,
tem.site_hour,
tem.asin,
tem.portfolio_id,
MIN(cv1.currency) AS currency,
SUM(cv1.attributed_conversions_1d) AS attributedConversions1d,
SUM(cv1.attributed_conversions_7d) AS attributedConversions7d,
SUM(cv1.attributed_conversions_14d) AS attributedConversions14d,
SUM(cv1.attributed_conversions_30d) AS attributedConversions30d,
SUM(cv1.attributed_conversions_1d_same_sku) AS attributedConversions1dSameMsku,
SUM(cv1.attributed_conversions_7d_same_sku) AS attributedConversions7dSameMsku,
SUM(cv1.attributed_conversions_14d_same_sku) AS attributedConversions14dSameMsku,
SUM(cv1.attributed_conversions_30d_same_sku) AS attributedConversions30dSameMsku,
SUM(cv1.attributed_sales_1d) AS attributedSales1d,
SUM(cv1.attributed_sales_7d) AS attributedSales7d,
SUM(cv1.attributed_sales_14d) AS attributedSales14d,
SUM(cv1.attributed_sales_30d) AS attributedSales30d,
SUM(cv1.attributed_sales_1d_same_sku) AS attributedSales1dSameMsku,
SUM(cv1.attributed_sales_7d_same_sku) AS attributedSales7dSameMsku,
SUM(cv1.attributed_sales_14d_same_sku) AS attributedSales14dSameMsku,
SUM(cv1.attributed_sales_30d_same_sku) AS attributedSales30dSameMsku,
SUM(cv1.attributed_units_ordered_1d) AS attributedUnitsOrdered1d,
SUM(cv1.attributed_units_ordered_7d) AS attributedUnitsOrdered7d,
SUM(cv1.attributed_units_ordered_14d) AS attributedUnitsOrdered14d,
SUM(cv1.attributed_units_ordered_30d) AS attributedUnitsOrdered30d,
SUM(cv1.attributed_units_ordered_1d_same_sku) AS attributedUnitsOrdered1dSameMsku,
SUM(cv1.attributed_units_ordered_7d_same_sku) AS attributedUnitsOrdered7dSameMsku,
SUM(cv1.attributed_units_ordered_14d_same_sku) AS attributedUnitsOrdered14dSameMsku,
SUM(cv1.attributed_units_ordered_30d_same_sku) AS attributedUnitsOrdered30dSameMsku
FROM tem
JOIN t_amazon_sp_advertisement cv1 ON tem.ad_id = cv1.ad_id AND tem.ad_group_id = cv1.ad_group_id AND tem.campaign_id = cv1.campaign_id AND tem.site_hour = cv1.site_hour
GROUP BY tem.source_id, tem.msku, tem.ad_id, tem.ad_group_id, tem.campaign_id, tem.site_hour, tem.asin, tem.portfolio_id
) t1
LEFT JOIN (
SELECT
1 AS customer_id,
DATE_FORMAT(STR_TO_DATE(tem.site_hour, %Y%m%d%H), %Y-%m-%d) AS report_day,
DATE_FORMAT(STR_TO_DATE(tem.site_hour, %Y%m%d%H), %H) AS report_hour,
0 AS ad_type,
tem.source_id,
tem.msku,
tem.ad_id,
tem.ad_group_id,
tem.campaign_id,
tem.site_hour,
tem.asin,
tem.portfolio_id,
MIN(tf1.currency) AS currency,
SUM(tf1.cost) AS cost,
SUM(tf1.impressions) AS impressions,
SUM(tf1.clicks) AS clicks
FROM tem
JOIN t_amazon_sp_ad_traffic tf1 ON tem.ad_id = tf1.ad_id AND tem.ad_group_id = tf1.ad_group_id AND tem.campaign_id = tf1.campaign_id AND tem.site_hour = tf1.site_hour
GROUP BY tem.source_id, tem.msku, tem.ad_id, tem.ad_group_id, tem.campaign_id, tem.site_hour, tem.asin, tem.portfolio_id
) t2 ON t1.campaign_id = t2.campaign_id AND t1.ad_group_id = t2.ad_group_id AND t1.ad_id = t2.ad_id AND t1.site_hour = t2.site_hour AND t1.source_id = t2.source_id AND t1.msku = t2.msku;
主要优化点:
1. 简化了临时表tem的查询,将UNION ALL操作下推到子查询中
2. 将LEFT JOIN改为INNER JOIN(改为JOIN),因为WHERE条件已要求匹配
3. 移除了不必要的COLLATE操作,假设表字符集一致
4. 使用BETWEEN简化范围查询
5. 优化了JOIN条件,减少数据量
explain表:
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | PRIMARY | <derived2> | None | ALL | None | None | None | None | 84426 | 100 | None |
| 1 | PRIMARY | <derived6> | None | ALL | None | None | None | None | 167423 | 100 | Using where; Using join buffer (hash join) |
| 6 | DERIVED | <derived3> | None | ALL | None | None | None | None | 1000 | 100 | Using temporary |
| 6 | DERIVED | tf1 | None | ref | idx_site_hour,idx_ad_id_own_hour,idx_adid | idx_site_hour | 5 | tem.site_hour | 167 | 100 | Using where |
| 2 | DERIVED | <derived3> | None | ALL | None | None | None | None | 1000 | 100 | Using temporary |
| 2 | DERIVED | cv1 | None | ref | idx_site_hour,idx_adid | idx_site_hour | 5 | tem.site_hour | 84 | 100 | Using where |
| 3 | DERIVED | <derived4> | None | ALL | None | None | None | None | 5901 | 100 | Using temporary; Using filesort |
| 4 | DERIVED | cv | None | range | idx_own_hour,idx_adid | idx_own_hour | 5 | None | 860 | 33.33 | Using index condition; Using where |
| 4 | DERIVED | p | None | eq_ref | ad_id,uni_key | ad_id | 202 | zhcxkj_center_adv_amazon.cv.ad_id | 1 | 9.24 | Using index condition; Using where |
| 4 | DERIVED | g | None | eq_ref | uni_source_campaign_id | uni_source_campaign_id | 206 | const,zhcxkj_center_adv_amazon.p.campaign_id | 1 | 100 | None |
| 5 | UNION | p | None | ref | ad_id,uni_key | uni_key | 4 | const | 13376 | 100 | None |
| 5 | UNION | cv | None | ref | idx_own_hour,idx_ad_id_own_hour,idx_adid | idx_adid | 27 | func,func,func | 236 | 0.19 | Using index condition; Using where |
| 5 | UNION | g | None | eq_ref | uni_source_campaign_id | uni_source_campaign_id | 206 | const,zhcxkj_center_adv_amazon.p.campaign_id | 1 | 100 | None |
额外建议:碎片化 SQL ,补全相关缺失索引
索引建议:join查询分析出错: (1146, "Table zhcxkj_center_adv_amazon.tem doesnt exist")join查询分析出错: (1146, "Table zhcxkj_center_adv_amazon.tem doesnt exist")join查询分析出错: (1146, "Table zhcxkj_center_adv_amazon.tem doesnt exist")join查询分析出错: (1146, "Table zhcxkj_center_adv_amazon.tem doesnt exist")join查询分析出错: (1146, "Table zhcxkj_center_adv_amazon.tem doesnt exist")join查询分析出错: (1146, "Table zhcxkj_center_adv_amazon.tem doesnt exist")
建议添加索引:ALTER TABLE t_amazon_sp_ad_traffic ADD INDEX idx_own_hour_site_date(own_hour,site_date);
【t_amazon_sp_ad_traffic】表 【own_hour,site_date】字段,索引分析:
+------------------------+--------------------+---------------+---------------+
| TABLE_NAME | INDEX_NAME | COLUMN_NAME | CARDINALITY |
+========================+====================+===============+===============+
| t_amazon_sp_ad_traffic | idx_ad_id_own_hour | own_hour | 2457870 |
+------------------------+--------------------+---------------+---------------+
| t_amazon_sp_ad_traffic | idx_adid | own_hour | 2157216 |
+------------------------+--------------------+---------------+---------------+
| t_amazon_sp_ad_traffic | idx_own_hour | own_hour | 14491 |
+------------------------+--------------------+---------------+---------------+
→ 【t_amazon_sp_advertisement】 表,无需添加任何索引。
建议添加索引:ALTER TABLE t_amazon_sp_ad_traffic ADD INDEX idx_own_hour_site_date(own_hour,site_date);
【t_amazon_sp_ad_traffic】表 【own_hour,site_date】字段,索引分析:
+------------------------+--------------------+---------------+---------------+
| TABLE_NAME | INDEX_NAME | COLUMN_NAME | CARDINALITY |
+========================+====================+===============+===============+
| t_amazon_sp_ad_traffic | idx_ad_id_own_hour | own_hour | 2457870 |
+------------------------+--------------------+---------------+---------------+
| t_amazon_sp_ad_traffic | idx_adid | own_hour | 2157216 |
+------------------------+--------------------+---------------+---------------+
| t_amazon_sp_ad_traffic | idx_own_hour | own_hour | 14491 |
+------------------------+--------------------+---------------+---------------+
→ 【t_sp_ad_product】表 【source_id】字段,索引已经存在,无需添加任何索引。
【t_sp_ad_product】表 【source_id】字段,索引分析:
+-----------------+--------------+---------------+---------------+
| TABLE_NAME | INDEX_NAME | COLUMN_NAME | CARDINALITY |
+=================+==============+===============+===============+
| t_sp_ad_product | uni_key | source_id | 71 |
+-----------------+--------------+---------------+---------------+
→ 【t_sp_ad_campaign】 表,无需添加任何索引。
→ 【t_sp_ad_product】表 【source_id】字段,索引已经存在,无需添加任何索引。
【t_sp_ad_product】表 【source_id】字段,索引分析:
+-----------------+--------------+---------------+---------------+
| TABLE_NAME | INDEX_NAME | COLUMN_NAME | CARDINALITY |
+=================+==============+===============+===============+
| t_sp_ad_product | uni_key | source_id | 71 |
+-----------------+--------------+---------------+---------------+
建议添加索引:ALTER TABLE t_amazon_sp_ad_traffic ADD INDEX idx_own_hour_site_date(own_hour,site_date);
【t_amazon_sp_ad_traffic】表 【own_hour,site_date】字段,索引分析:
+------------------------+--------------------+---------------+---------------+
| TABLE_NAME | INDEX_NAME | COLUMN_NAME | CARDINALITY |
+========================+====================+===============+===============+
| t_amazon_sp_ad_traffic | idx_ad_id_own_hour | own_hour | 2457870 |
+------------------------+--------------------+---------------+---------------+
| t_amazon_sp_ad_traffic | idx_adid | own_hour | 2157216 |
+------------------------+--------------------+---------------+---------------+
| t_amazon_sp_ad_traffic | idx_own_hour | own_hour | 14491 |
+------------------------+--------------------+---------------+---------------+
→ 【t_sp_ad_campaign】 表,无需添加任何索引。
大概看了下,sql语句中涉及的表 非 亚马逊广告系统(net) 这边的表结构,查询后亦无相关表;
看下是否为广告系统下游(财务组)或 亚马逊有品 那边的表;