sql 查询条件中需要使用 != 情况下的优化

来源:互联网 发布:nginx 泛解析子域名 编辑:程序博客网 时间:2024/05/08 16:39
随手写了段代码:
  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可以数十倍地提升效率

原创粉丝点击