1.问题分析
华为日志里大量的这个慢sql,执行时间18秒左右,请求很多
2.解决方案
2.1因要查询多个字段,而且Apx_AdjustPrice_History表数据量大,优化方案是先查询出id,在通过id join 查询出需要的字段,测试速度非常快1秒左右
2.2 优化后的sql
SELECT a.id `CustomerId`,`PlanID`,`PlanType`,`OrderSourceId`,`OrderSourceSku`,`StrategyDirection`,`Number`,`Content`,`Price`,`DiscountValue`,`BeginDate`,`EndDate`,`LastExecuteDate`,`SalesVolume`,`DailyAverageSalesVolume`,`Sales`,`DailyAverageSales`,`Profit`,`DailyAverageProfit`,`AverageProfitRate`,`Date`,`Time`,`LastModifierId`,`LastModifier`,`LastModificationTime`,`CreatorId`,`Creator`,`CreationTime`
from Apx_AdjustPrice_History a join
(
select Id
FROM `Apx_AdjustPrice_History` WHERE (((( `LastExecuteDate` ='2023-05-05 00:00:00') AND ( `Number` > 0 )) AND ( `CustomerId` = 1 )) AND ( `Id` > 7792209049 )) ORDER BY `Id` ASC LIMIT 12000,1000
) b on a.id=b.id
3.慢sql
SELECT `CustomerId`,`PlanID`,`PlanType`,`OrderSourceId`,`OrderSourceSku`,`StrategyDirection`,`Number`,`Content`,`Price`,`DiscountValue`,`BeginDate`,`EndDate`,`LastExecuteDate`,`SalesVolume`,`DailyAverageSalesVolume`,`Sales`,`DailyAverageSales`,`Profit`,`DailyAverageProfit`,`AverageProfitRate`,`Date`,`Time`,`LastModifierId`,`LastModifier`,`LastModificationTime`,`CreatorId`,`Creator`,`CreationTime`,`Id` FROM `Apx_AdjustPrice_History` WHERE (((( `LastExecuteDate` ='2023-05-05 00:00:00') AND ( `Number` > 0 )) AND ( `CustomerId` = 1 )) AND ( `Id` > 7792209049 )) ORDER BY `Id` ASC LIMIT 12000,1000;
-- 35秒查询
已优化