优化MYSQL语句 减少运行时间SELECT O.子品牌, O.商品数字ID, COUNT(DISTINCT o.用户id ) AS 新客, SUM(o.商品实付金额) AS 新客_商品实付金额 FROM 天猫官旗有效数据 o LEFT JOIN 天猫官旗有效数据 old_c ON o.用户id = old_c.用户id AND old_c.支付日期 BETWEEN '2021-10-31' AND '2022-10-30' WHERE o.支付日期 >= '2022-10-31' AND o.支付日期 <= '2022-11-11' AND old_c.用户id IS NULL GROUP BY 1,2 ORDER BY 1,2;
时间: 2024-01-24 17:17:44 浏览: 139
可以尝试以下优化:
1. 添加索引:可以在表的用户id、支付日期、商品实付金额列上添加索引,以提高查询效率;
2. 简化左连接条件:由于要查询的是新客户,可以将左连接中的日期条件移至WHERE子句中;
3. 使用EXISTS子查询代替LEFT JOIN:由于只需要查询不存在于旧数据表中的新客户,可以使用EXISTS子查询来代替LEFT JOIN。
优化后的SQL语句如下:
```
SELECT O.子品牌, O.商品数字ID, COUNT(DISTINCT o.用户id ) AS 新客, SUM(o.商品实付金额) AS 新客_商品实付金额
FROM 天猫官旗有效数据 o
WHERE o.支付日期 >= '2022-10-31' AND o.支付日期 <= '2022-11-11'
AND NOT EXISTS (
SELECT 1 FROM 天猫官旗有效数据 old_c
WHERE o.用户id = old_c.用户id AND old_c.支付日期 BETWEEN '2021-10-31' AND '2022-10-30'
)
GROUP BY 1,2
ORDER BY 1,2;
```
阅读全文