zoukankan      html  css  js  c++  java
  • Intersect, Except, Union, All and Any(3)

    --注:此文为意译

    谓词ANY和ALL,我从不需要使用

    1. ANY

    以下两个query会返回相同的结果和执行计划

    select
    	*
    from
    	Sales.SalesPerson
    where
    	TerritoryID = ANY(select TerritoryID from Sales.SalesTerritory where CountryRegionCode = 'US')
    
    select
    	*
    from
    	Sales.SalesPerson
    where
    	TerritoryID in (select TerritoryID from Sales.SalesTerritory where CountryRegionCode = 'US')
     

    为了演示ANY谓词的实际使用场景,我们使用如下代码在AdventureWorks库中创建一张新表Sales.TopSales

    select top 5
    	SalesOrderID,
    	TotalDue
    into
    	Sales.TopSales
    from
    	Sales.SalesOrderHeader
    order by
    	TotalDue desc
    
    alter table Sales.TopSales
    add constraint PK_TopSales primary key clustered(SalesOrderID)
    
    create index idx_TopSales_TotalDue on Sales.TopSales(TotalDue desc)

    我们来获得超过Sales.TopSales表中最小TotalDue的SalesOrderHeader记录

    select
    	*
    from
    	Sales.SalesOrderHeader
    where
    	TotalDue > ANY(select TotalDue from Sales.TopSales)
    order by
    	TotalDue desc

    生成的执行计划如下:

    ANY

    其Subtree Cost:3.47018

    使用另一种方法实现相同逻辑

    select
    	*
    from
    	Sales.SalesOrderHeader
    where
    	TotalDue > (select min(TotalDue) from Sales.TopSales)
    order by
    	TotalDue desc

    生成的执行计划如下:

    MIN

    其Subtree Cost:1.24078

    2. ALL

    谓词ALL允许对一个SELECT结果列表中的所有值进行比较。以下两个查询是逻辑对等的。

    select
    	*
    from
    	Sales.SalesOrderHeader
    where
    	TotalDue > ALL(select TotalDue from Sales.TopSales)
    order by
    	TotalDue desc
    	
    select
    	*
    from
    	Sales.SalesOrderHeader
    where
    	TotalDue > (select max(TotalDue) from Sales.TopSales)
    order by
    	TotalDue desc

    两个查询所生成的执行计划如下,有着明显的不同之处

    ALL

    使用ALL谓词的query的Subtree Cost: 3.46994

    其等价query的Subtree Cost: 1.24078

    对于试用ANY和ALL得到的结论

    从以上的实验中没有看出使用ANY或ALL谓词在性能方面的好处,可能使用这两个谓词的唯一目的是为了方便。

  • 相关阅读:
    Linux内核异常处理体系结构详解(一)【转】
    一则利用内核漏洞获取root权限的案例【转】
    linux tracepoint用法【转】
    实现PC视频播放最强画质教程( Potplayer播放器+MADVR插件)【转】
    getopt_long函数使用【转】
    用Qemu运行/调试arm linux【转】
    linux内核input子系统解析【转】
    Linux input子系统 io控制字段【转】
    Linux设备树语法详解【转】
    of_alias_get_id 函数与设备树中aliases节点的关系【转】
  • 原文地址:https://www.cnblogs.com/DBFocus/p/1743055.html
Copyright © 2011-2022 走看看