Sql-Server
在事務中的過程中添加可選更新的最佳方法是什麼?
目前,我有一個程序可以在以下位置執行 4 個操作
Transaction
:
- 更新表中的記錄
A
- 更新表中的記錄
B
- 向表中插入記錄
C
- 從表中刪除記錄
D
@IsUpdateA
只有當procedure ( ) 的一個參數等於1時,才執行第一個操作。因此,從業務角度來看,如果
@IsUpdateA
= 1,則必須執行表 A 的更新,而始終執行第 2、3 和 4 步。問題是將這樣的程序分成兩部分是否更好(就效率/執行計劃而言),即
- 第一個程序將始終執行步驟 1、2、3、4
- 第二個程序將始終執行步驟 2,3,4
並將
@IsUpdateA
在應用程序中進行檢查。我不能在程序中使用程序(內部要求)。
無論您的程序邏輯如何,優化器都會使用嗅探到的參數值。想像一下您的 proc 程式碼中只有 DML 語句和參數。
因此,當生成計劃時,當@IsUpdateA = 0 時,要用於UPDATE 的值可能是無意義的值。從性能的角度來看,就是這樣。想想 WHERE 子句和選擇性。即,為那個 UPDATE(未執行)創建的計劃是基於給你不正確的選擇性計算的值,因此是一個糟糕的計劃。
或者反過來,當然。
即,擁有兩個 proc 可以為您提供更好的估計,並最終為您提供更好的計劃。