Sql-Server

在事務中的過程中添加可選更新的最佳方法是什麼?

  • September 8, 2020

目前,我有一個程序可以在以下位置執行 4 個操作Transaction

  1. 更新表中的記錄A
  2. 更新表中的記錄B
  3. 向表中插入記錄C
  4. 從表中刪除記錄D

@IsUpdateA只有當procedure ( ) 的一個參數等於1時,才執行第一個操作。

因此,從業務角度來看,如果@IsUpdateA= 1,則必須執行表 A 的更新,而始終執行第 2、3 和 4 步。

問題是將這樣的程序分成兩部分是否更好(就效率/執行計劃而言),即

  1. 第一個程序將始終執行步驟 1、2、3、4
  2. 第二個程序將始終執行步驟 2,3,4

並將@IsUpdateA在應用程序中進行檢查。我不能在程序中使用程序(內部要求)。

無論您的程序邏輯如何,優化器都會使用嗅探到的參數值。想像一下您的 proc 程式碼中只有 DML 語句和參數。

因此,當生成計劃時,當@IsUpdateA = 0 時,要用於UPDATE 的值可能是無意義的值。從性能的角度來看,就是這樣。想想 WHERE 子句和選擇性。即,為那個 UPDATE(未執行)創建的計劃是基於給你不正確的選擇性計算的值,因此是一個糟糕的計劃。

或者反過來,當然。

即,擁有兩個 proc 可以為您提供更好的估計,並最終為您提供更好的計劃。

引用自:https://dba.stackexchange.com/questions/275150