我使用這下面的查詢來更新我的表數據沒有where子句來改善性能
Update BudCustomers
set BudCustomers.ImportedRecord = ImportedRecord
,BudCustomers.VersionID = @VersionId
,BudCustomers.STATUSID = @StatusId
,BudCustomers.MajorCode = EBIC.MajorCode
FROM BudCustomers BCUST
JOIN External_Blk_Itm_Contracts EBIC ON BCUST.LegalName = EBIC.CustomerName
Where BCUST.ImportedRecord <> @ImportedRecord
OR BCUST.STATUSID <> @StatusId
OR BCUST.MajorCode <> EBIC.MajorCode
但由於性能問題,我不想使用WHERE子句,而不是我想要做的這些where子句中的事情重寫查詢加入本身但是我懷疑我是否正確。請爲此與下面的查詢進行比較。這是否會起作用?我很擔心AND和OR條件加入它會工作相同
Update BudCustomers
set BudCustomers.ImportedRecord = ImportedRecord
,BudCustomers.VersionID = @VersionId
,BudCustomers.STATUSID = @StatusId
,BudCustomers.MajorCode = EBIC.MajorCode
FROM BudCustomers BCUST
JOIN External_Blk_Itm_Contracts EBIC ON BCUST.LegalName = EBIC.CustomerName AND BCUST.ImportedRecord <> @ImportedRecord OR BCUST.STATUSID <> @StatusId OR BCUST.MajorCode <> EBIC.MajorCode
混合AND和OR沒有括號不是一個好主意。將BCIN重寫爲(BCUST.LegalName = EBIC.CustomerName AND BCUST.ImportedRecord <> @ImportedRecord)AND(BCUST.STATUSID <> @StatusId OR BCUST.MajorCode <> EBIC.MajorCode)。但我認爲這對優化器是一樣的。在SSMS中啓用「包含實際執行計劃」選項來檢查兩個查詢。 – EKOlog
將nonSARGable謂詞移入連接不會有助於提高性能。你可以通過改變類似於(Row> Parameter OR Row
我在查詢中犯了一個錯誤。它應該是:「加入(BCUST.LegalName = EBIC.CustomerName)和(BCUST.ImportedRecord <> @ImportedRecord)或(BCUST.STATUSID <> @StatusId或BCUST.MajorCode <> EBIC.MajorCode))」 – EKOlog