当前位置:Gxlcms > 数据库问题 > 在SQL Server中为什么不建议使用Not In子查询

在SQL Server中为什么不建议使用Not In子查询

时间:2021-07-01 10:21:17 帮助过:2人阅读

*
FROM    Sales.SalesOrderHeader a
WHERE   NOT EXISTS ( SELECT *
                     FROM   Sales.SalesOrderDetail b
                     WHERE  a.SalesOrderID = b.ProductID )
        AND NOT EXISTS ( ( SELECT   *
                           FROM     Sales.SalesOrderDetail b
                           WHERE    b.ProductID IS NULL
                         ) )
        AND NOT EXISTS ( SELECT 1
                         FROM   ( SELECT    *
                                  FROM      Sales.SalesOrderHeader
                                ) AS c
                         WHERE  c.SalesOrderID IS NULL )

代码清单1.当连接列两列定义都允许Null时,Not In等价的Not Exists形式

 

    此时我们简单对比Not In和Not Exists的IO情况,如图10所示。

技术分享

图10.Not In吃掉很高的IO

 

小结

    本文阐述了Not In 的实现原理以及所带来的数据不一致和性能问题,在写查询时,尽量避免使用Not In,而转换为本文提供的Not Exists等价形式,将会减少很多麻烦。

在SQL Server中为什么不建议使用Not In子查询

标签:

人气教程排行