我正在尝试使用类似于以下查询的查询来查找两个表之间的差异(DEV 数据库与 TEST 数据库中的同一个表)。每个表有约 30K 行和约 5 列。
select field1,field2,field3,field4,field5 from dev.dbo.table1
where field1+field2 in ('string1','string2','string3',...,'string50')
except
select field1,field2,field3,field4,field5 from test.dbo.table1
where field1+field2 in ('string1','string2','string3',...,'string50')
field1 是char(5)
field2 是char(1)
这个查询基本上永远不会终止。
当我使用 分析这个查询时SET SHOWPLAN_ALL ON
,我可以看到树中有一个非常高的嵌套循环。当我将上述查询更改为
select * from dev.dbo.table1
except
select * from test.dbo.table2
查询运行很快,执行计划中没有嵌套循环。
有人可以帮忙解释一下吗?我不明白为什么会有很大的不同。