一个mysql语句的优化

发布时间 2023-12-23 15:05:05作者: chy_cug

语句如下:

select count(*) into cCount

from laratecommision a

where branchtype=3 and riskcode = sRiskCode and a.payyears = sPayYears and a.PayYear =sPayYear and a.BANKCHANNEL = sAgentCom and a.RATECOMSTATE = '1' and a.AGENTSERIAL = sAgentSeries and a.ACTIVETIME = CONCAT(sYears,sYearsFlag)
and a.F03 = sRateType and a.versiontype=sVersiontype AND a.startdate <= sCvaliDate and a.enddate >=sCvaliDate and a.managecom = sManageCom and a.Regionalismcode =sRegionalismCode;

 

其中:

sRiskCode等为传入funciton的参数。每个sql语句的执行时间为0.4秒,因为这样的语句较多,所以导致比较慢。

 

优化步骤如下:

1、查询每个步骤的耗时时间,定位到耗时时间长的sql语句;
2、查询耗时时间长的sql语句里面,是否有查询条件不匹配的情况,例如:字段类型是浮点型,但是传入的参数是字符型,如果有则修改掉;
3、类似“date(a.enddate) >=sCvaliDate”的查询条件(左边是对于字段的函数操作,右边是常数),修改为“a.enddate >= to_char(sCvaliDate,...)”(左边不包括函数,函数在右边);
4、分析where查询条件涉及到的字段的数据分布,在重复值较多的字段上面创建索引;如果重复值都较少,则把涉及到的字段创建联合索引。同时查看执行计划,
确保查询是走了索引的。

优化结果为:优化后,每个sql语句的执行时间为0秒。