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谓词在性能方面的好处,可能使用这两个谓词的唯一目的是为了方便。

  • 相关阅读:
    UVa 1451 Average (斜率优化)
    POJ 1160 Post Office (四边形不等式优化DP)
    HDU 3507 Print Article (斜率DP)
    LightOJ 1427 Substring Frequency (II) (AC自动机)
    UVa 10245 The Closest Pair Problem (分治)
    POJ 1741 Tree (树分治)
    HDU 3487 Play with Chain (Splay)
    POJ 2828 Buy Tickets (线段树)
    HDU 3723 Delta Wave (高精度+calelan数)
    UVa 1625 Color Length (DP)
  • 原文地址:https://www.cnblogs.com/DBFocus/p/1743055.html
Copyright © 2011-2022 走看看