T-SQL效率(相对基础)

时间:2011-12-28 03:32:28

标签: sql performance tsql

我觉得这有点傻,因为它可能很简单。

Select DISTINCT ID from tbl1
    where col2='abc'
            ...
    and ID not in (select distinct tbl2.ID from tbl2 where tbl2.Dtm > '2010-01-01')

这是我在TSQL中upsert的一部分,所以Id需要再次运行tbl2 where子句(我曾经使用merge但它在这个DB中不可用)。这里的问题是tbl2有数百万行,而tbl1有数万行。显然像tb1xtbl2一样运行它效率极低。我曾想过使用游标和临时表,但我没有看到运行得更好?

有人有其他想法吗?

1 个答案:

答案 0 :(得分:1)

有几种不同的方法可以定义这种类型的查询。

请使用“左连接”,“不存在”和“不存在”创建查询并检查执行计划,只有这样您才会知道哪一个更适合您的情况。

左外连接方式

Select Distinct ID
FROM tbl1 t1
LEFT OUTER JOIN tbl2 on t1.ID = t2.ID and t2.DTM > '2010-01-01'
WHERE
t1.Col2 = 'abc'
AND t2.ID IS NULL

参考:

Similar Discussion Thread