昨晚跑了一個程序:批量刪除一些數據,我sql語句寫的有點爛,在where條件時候用的是 IN 。所以最後發生異常:查詢處理器用盡了內部資源,無法生成查詢計劃。這種情況很少出現,只有在查詢極其複雜或引用了大量表或分區時纔會出現。請簡化查詢。
百度了下,可能是在刪除時候先去查詢,where後面的條件太多了,導致異常。這個時候應該優化sql語句,如果我們做的是表關聯的查詢,可能因爲表太多或者表數據量大出現這種問題,這個時候我們要先細化,查詢,放到臨時表中,再union 這些臨時表,舉個例子:如果要關聯1500張表,你可以先500一張臨時表,再三個臨時表union一張表,具體怎麼細分可以自己定。
在這裏我可以選擇單條插入,但是如果我一次性刪除一萬行數據,那我不開的事物太多了,也會導致數據庫很慢。
可以寫多條delete語句,一起提交,這個時候會更快些,因爲事物只有一個。
注意:這裏如果你使用exists 可能比in好些,但是我沒有試過,在sql server 數據庫中最好用exists。
查詢處理器用盡了內部資源,無法生成查詢計劃。這種情況很少出現,只有在查詢極其複雜或引用了大量表或分區時纔會出現。請簡化查詢。如果您認爲該消息的出現純屬錯誤,請與客戶支持服務部門聯繫