[...]SQL Server 不能说 NULL = NULL,当我在所有列上保留 ISNULL 函数时,查询需要 20-30 分钟。
这并不完全正确。出于此比较的目的,您可以将 ansi_nulls 设置为关闭。请注意,此功能可能在未来的 SQL Server 版本中不可用,但至少在 2012 年之前它仍然存在。
set ansi_nulls on
select 1 where 1 != null -- returns nothing
select 1 where null = null -- returns nothing
select 1 where null != null -- returns nothing
set ansi_nulls off
select 1 where 1 != null -- returns 1
select 1 where null = null -- returns 1
select 1 where null != null -- returns nothing
如果这不能解决您的性能问题,您可能需要研究索引或更好的硬件以使查询运行得更快,或者退后一步重新分析正在发生的事情,然后重构解决方案。乍一看,这似乎是一个不寻常的操作(在非常相似的表之间复制数据,但仅在所有这些数据的匹配上),但提供准确的表定义、要求和示例可能会有很长的路要走帮助他人了解可以改变的地方。