我需要获取表“#Tbl1”的所有记录,其中“DisplayId”不在表“#Tbl2”中。
“#Tbl2”正在增长表
创建表#Tbl1(Id1 Int Identity(1,1),DisplayId Nvarchar(200),Name Nvarchar(200)) 插入#Tbl1(DisplayId,Name)值('d1','ABC'),('d2','PQR')
创建表#Tbl2(Id2 Int Identity(1,1),DisplayId Nvarchar(200)) 插入#Tbl2(DisplayId)值('d1')
以下查询正在运行,但是要查找有效的查询,请建议哪个表的列需要哪种索引?
我正在使用SQL Server 2008 R2
Select * From #Tbl1
Where DisplayId Not In (Select DisplayId From #Tbl2)
答案 0 :(得分:0)
使用in语句似乎总体上看起来很慢,如果可能的话我会使用exists语句,但我不确定它是否在SQL Server 2008上受支持。其他选项是左连接也会很慢
存在或(不存在)语句的工作原理如下
select * from #tbl1 t1
where not exists (select displayid from #tbl2 where displayid = t1.displayid)
注意使用别名t1,您不必在子选择中选择一列,您可以使用通配符*。我发现这种类型的查询效率更高,因为它直接在2个表之间使用索引链接,而不是先选择所有列然后过滤它们。