我有以下查询:
select *
from Table1 tb1
where ((tb1.Field1 + tb1.Field2 + tb1.Field3) not in
(
select (tb2.Field1 + tb2.Field2 + tb2.Field3)
from Table2 tb2 )
)
查询在sql server 2000上运行大约10秒钟,但在sql server 2005上运行了几个小时。这些机器是相同的,两个环境都具有相同的密钥和索引。 每个表有大约350,000条记录。我唯一能想到的是sql2005不能处理相同的连接。 我正在升级到sql2005(哈哈,我希望它会是2008年或2012年,但这是我无法控制的)。任何想法将不胜感激。
谢谢, 弗兰克
答案 0 :(得分:1)
SELECT *
FROM Table1 tb1
WHERE NOT EXISTS
(
SELECT NULL
FROM table2 tb2
WHERE tb2.field1 = tb1.field1
AND tb2.field2 = tb1.field2
AND tb3.field3 = tb1.field3
)
这适用于两个数据库。
答案 1 :(得分:0)
我建议你在两个数据库中编写这样的查询:
select tb1.*
from Table1 tb1 left outer join
Table2 tb2
on tb1.Field1 = tb2.Field1 and
tb1.Field2 = tb2.Field2 and
tb1.Field3 = tb3.Field3
where tb2.Field1 is null;
然后,如果效果不佳,您甚至可以在Table2(Field1, Field2, Field3)
和/或Table1(Field1, Field2, Field3)
上添加索引以提高效果。
(注意:我假设连接是为了确保各个字段是相同的。也就是说,在一个表中没有类似('A','B','C')的情况和('ABC','','')在另一个。)
答案 2 :(得分:0)
我建议使用NOT EXISTS而不是NOT IN