MSSQL优化案例系列-在Where子句使用or连接条件使索引失效

某客户反馈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分钟。

      继续检查索引和数据量&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值