内容摘要:关于T-SQL过滤运算符的流行经验法则确实不少,但却不能够尽信,相反我们应该对自己的选择做出确切的评价。
图一. 等于和IN运算符的执行计划:在本例的数据库环境下,这两个查询都生成了相同的执行计划。
ANY和EXISTS逻辑运算符
当参数中有任何一项满足了条件,那ANY逻辑运算符会返回一个true布尔值;而对于EXISTS逻辑运算符来说,如果其参数中的子查询返回任意行的话,那EXISTS运算符就会返回true值。测试这些运算符的性能要谨慎对待,因为其中使用的子查询可能会包含其他运算符,将直接影响到测试结果。为了尽量减少这方面的影响,下面的ANY和EXISTS查询实例都包含了一个使用等于比较运算符的子查询。
下面是测试ANY逻辑运算符的查询语句:
以下是引用片段:
SELECT
SalesOrderID,
CarrierTrackingNumber,
ProductID,
UnitPrice
FROM
AdventureWorks.Sales.SalesOrderDetail
WHERE
ProductID=ANY(
SELECT
ProductID
FROM
AdventureWorks.Production.Product
WHERE
(ProductID='762')OR
(ProductID='754')OR
(ProductID='770')
)
以及测试EXISTS逻辑运算符的查询语句:
以下是引用片段:
SELECT
a.SalesOrderID,
a.CarrierTrackingNumber,
a.ProductID,
a.UnitPrice
FROM
AdventureWorks.Sales.SalesOrderDetaila
WHERE
EXISTS(
SELECT
b.ProductID
FROM
AdventureWorks.Production.Productb
WHERE
a.ProductID=b.ProductID
AND(
(b.ProductID='762')or
(b.ProductID='754')or
(b.ProductID='770')
)
)
来源:IT专家网 作者:cyw 责编:豆豆技术应用