0

sales次のいくつかの列で呼び出されるテーブルがあります。

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

salesno今、私はではないすべての行を選択したいadvanceno:

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')

クエリを最適化するにはどうすればよいですか?

4

1 に答える 1

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
于 2012-05-08T03:36:20.363 に答える