0

我有以下查询:

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 年,但这是我无法控制的)。任何想法将不胜感激。

谢谢,弗兰克

4

3 回答 3

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
        )

这将适用于两个数据库。

于 2013-09-19T18:51:38.033 回答
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', '', '') 在另一个。)

于 2013-09-19T18:50:06.633 回答
0

我建议使用 NOT EXISTS 而不是 NOT IN

于 2013-09-19T18:53:19.407 回答