评价过滤运算符选择对T-SQL执行性能的影响机制

豆豆网   技术应用频道   2008年01月16日  【字号: 收藏本文

内容摘要:关于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    责编:豆豆技术应用

正在加载评论...