SQL Server加速查询不在

时间:2012-05-08 03:21:25

标签: sql-server sql-server-2008r2-express

我有一个名为sales的表,其中包含以下几列:

salesno (PK, char(25))
advanceno (char(15), not null)

现在我要选择salesnoadvanceno不在的所有行:

SELECT salesno 
FROM sales 
WHERE salesno NOT IN (SELECT advanceno FROM sales)

查询很慢,因为sales表有几十万行。

我这样做了,速度非常快:

SELECT salesno 
FROM sales 
WHERE salesno NOT IN ('000008360', '000008361', '000008362', '000008363', '000008364')

如何优化查询?

1 个答案:

答案 0 :(得分:4)

试试这个:

DECLARE @sales as Table (salesno char(25)
,advanceno char(15) not null)

INSERT INTO @sales(salesno,advanceno)
SELECT '000008360','000008360' UNION ALL
SELECT '000008361','000008362' UNION ALL
SELECT '000008362','000008364' 

SELECT  s.salesno 
FROM    @sales s 
LEFT JOIN @sales a ON a.advanceno = s.salesno
WHERE   a.advanceno IS NULL

在你的例子中,试试这个

SELECT  s.salesno 
FROM    sales s 
LEFT JOIN sales a ON a.advanceno = s.salesno
WHERE   a.advanceno IS NULL