我尝试使用类似于以下查询的查询来查找两个表之间的差异(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')
字段 1 是char(5)
字段 2 是char(1)
这个查询基本上永远不会终止。
当我使用分析这个查询时SET SHOWPLAN_ALL ON
,我可以看到树中有一个相当高的嵌套循环。当我将上面的查询更改为
select * from dev.dbo.table1
except
select * from test.dbo.table2
查询运行速度很快,并且执行计划中没有嵌套循环。
有人可以帮忙解释一下吗?我不明白为什么会有如此巨大的差异。