1. 程式人生 > >sql 查詢條件中需要使用 != 情況下的優化

sql 查詢條件中需要使用 != 情況下的優化

隨手寫了段程式碼:
  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可以數十倍地提升效率