随手写了段代码:
执行效率很高,整个执行过程是4秒。但要处理另外的情况时,也是随手把代码改成:
join BB_BizObjects HC on HC.Id = HR.ForeignKey
join BB_BizObjectValue_String ST on ST.ObjectId = HC.Id
and ST.PropertyId = '75ecbb0f-b52c-4d47-8e0d-b360cdc7fa22'
and ST.Value = '个人缴费'
执行效率很高,整个执行过程是4秒。但要处理另外的情况时,也是随手把代码改成:
join BB_BizObjects HC on HC.Id = HR.ForeignKey
join BB_BizObjectValue_String ST on ST.ObjectId = HC.Id
and ST.PropertyId = '75ecbb0f-b52c-4d47-8e0d-b360cdc7fa22'
and ST.Value != '个人缴费'
结果就杯具了,运行效率一下子降低数十倍,等了十来分钟才出来结果。。。
然后,把代码改为
join BB_BizObjects HC on HC.Id = HR.ForeignKey
where not exists (
select * from BB_BizObjectValue_String
where ObjectId = Hc.Id
and PropertyId = '75ecbb0f-b52c-4d47-8e0d-b360cdc7fa22'
and Value = '个人缴费')
效率又回来了,6秒就执行完成了。
强烈建议大家不要在条件里用!=做运算符,使用exists可以数十倍地提升效率