T-SQL效率(相对基本)



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

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中更新的一部分,所以我需要再次运行tbl2 where子句(我曾经使用合并,但在这个DB中不可用)。这里的问题是,tbl2有数百万行,而tbl1有数万行。显然,像这样运行t1xtbl2是非常低效的。我想使用游标和临时表,但我没有看到运行得更好吗?

有人有其他想法吗?

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

请使用Left Join, Not In和Not Exists创建查询,并检查执行计划,只有这样你才能知道哪一个更适合你的情况。

左外连接方式

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
参考:

类似讨论区

最新更新