sql 查詢條件中需要使用 != 情況下的優化
阿新 • • 發佈:2019-02-12
隨手寫了段程式碼:
執行效率很高,整個執行過程是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可以數十倍地提升效率