由於 SQL Server 中的自動參數化過程,多個 INSERT 語句的效能優於具有多個 VALUES 的單一 INSERT。
如果有多個 INSERT 語句,則編譯並執行每個語句獨立,產生最小的開銷。但是,對於包含多個 VALUES 的單一 INSERT 語句,查詢最佳化器必須在執行之前解析和編譯整個語句,這會顯著增加編譯時間。
自動參數化的截止發生在 250 個 VALUES 子句左右。超過這個點,快取的計畫大小會突然下降,編譯時間急遽增加,處理值子句的效率線性下降。
此行為源自於計畫類型的變更。使用自動參數化時,計劃特定於要插入的文字值。當超過限制時,計劃將變為非參數化,並且必須執行不線性擴展的活動,例如排序,這會導致編譯時間更長。
這種影響可能會很大,尤其是處理較長的字串或唯一值時。如圖所示,增加字串長度或消除重複項會導致具有多個 VALUES 方法的單一 INSERT 語句的效能變差。
相反,引入重複項會提高效能,因為SQL Server 可以在代數階段識別它們並避免重複項
因此,對於插入多行,使用多個INSERT 語句通常比使用多個INSERT 語句更有效率值,特別是在處理較長的字串或唯一值時。
以上是為什麼在 SQL Server 中多個 INSERT 語句比具有多個值的單一 INSERT 更快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!