我使用这下面的查询来更新我的表数据没有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