某客户反馈ERP经常卡死,线上商城也会经常卡住,使用脚本看了一下正在执行的脚本,定位到了一个会员积分扣减的存储过程,大概长这个样子
CREATE PROCEDURE Sp_CRM_MembersDeductionIntegral
@CardCode varchar(40), --会员卡号
@MobilPhone nvarchar(20), --手机号码
@SourceType int, --扣减类型枚举 0:ERP,1:线上商城
@Integral decimal(24,6) --扣减的积分
AS
BEGIN
declare @CardID varchar(40)
--判断扣减类型,如果是ERP扣减,根据卡号找到会员卡进行扣减,如果是线上商城,传入的是手机号码,根据手机号码找到会员卡扣减
select top 1 @CardID=a.CardID
from Crm_Bas_Card a
join Crm_Bas_CardCustomer b on a.CustomerID=b.CustomerID
where (@SourceType=0 and CardCode=@CardCode)
or (@SourceType=1 and b.MobilPhone=@MobilPhone)
--找到会员卡后继续进行业务逻辑处理
.......
END
GO
进一步观察,发现获取会员卡ID这段代码执行效率很低,整个过程经常要卡1到2分钟的样子,这段代码就要执行1到2分钟。
继续检查索引和数据量&#