博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Intersect, Except, Union, All and Any(3)
阅读量:7079 次
发布时间:2019-06-28

本文共 1613 字,大约阅读时间需要 5 分钟。

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

1. ANY

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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'
)
1
  

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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记录

1
2
3
4
5
6
7
8
select
    
*
from
    
Sales.SalesOrderHeader
where
    
TotalDue >
ANY
(
select 
TotalDue
from 
Sales.TopSales)
order 
by
    
TotalDue
desc

生成的执行计划如下:

其Subtree Cost:3.47018

 

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

1
2
3
4
5
6
7
8
select
    
*
from
    
Sales.SalesOrderHeader
where
    
TotalDue > (
select 
min
(TotalDue)
from 
Sales.TopSales)
order 
by
    
TotalDue
desc

生成的执行计划如下:

其Subtree Cost:1.24078

 

2. ALL

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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谓词的query的Subtree Cost: 3.46994

其等价query的Subtree Cost: 1.24078

 

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

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

转载地址:http://ubpml.baihongyu.com/

你可能感兴趣的文章
隐马尔科夫模型研究 stock 以及 lotto
查看>>
Fiddler抓包使用教程-安装配置
查看>>
php如何妩媚地生成执行的sql语句
查看>>
第 93 章 JVM
查看>>
微信或将于12月开放H5游戏入口
查看>>
如何处理 android 方法总数超过 65536 . the number of method references in a .dex file exceed 64k...
查看>>
[常微分方程]Lecture 1: ODE的几何解法:方向场、积分曲线
查看>>
[翻译]LSP程序的分类
查看>>
【工作】蚂蚁金服招DBA
查看>>
Nim教程【十】
查看>>
oracle for linux安装报错 file /home/oracle/.Xauthority does not exist
查看>>
SAP MM 顾问在实施项目工作中的苦逼和优势
查看>>
用SoapUI进行Webservice的性能压力测试
查看>>
SAP传输系统TMS的配置和实例
查看>>
IT依然重要 CIO转型至关重要
查看>>
[20160407]光标共享TOP_LEVEL_RPI_CURSOR
查看>>
Thinkphp入门三—框架模板、变量(47)
查看>>
深入理解C指针之六:指针和结构体
查看>>
git branch(转)
查看>>
MaxCompute 2.0 The Evolution of NewSQL
查看>>