首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL的处理

SQL的处理
EN

Stack Overflow用户
提问于 2016-06-02 16:53:29
回答 1查看 29关注 0票数 0

我有一个关于SQL代码处理的问题。下列哪一个程序更有效?还是一样的?

我的理解-第二个程序更有效,因为它在联接之前对数据进行了细分。

代码语言:javascript
复制
select a.custid, b.ref_date,b.status
from customertable a
left join accounts b
on a.custid = b.custid
where '2015-01-01' <= b.ref_date <= '2016-01-01'

select a.custid, b.ref_date,b.status
from customertable a
left join (select * from accounts
where '2015-01-01' <= ref_date <= '2016-01-01') b
on a.custid = b.custid
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-02 16:57:52

SQL是一种声明性语言,这意味着您要告诉系统您想要什么结果,并决定如何获取这些结果。因此,在大多数情况下,无法肯定地说对另一个查询的查询是否更“高效”,因为编译器在开发什么计划方面有很大的回旋余地。

尽管如此,您的两个查询并不等价。

假设您有以下数据:

代码语言:javascript
复制
customertable 
-------------

custid
------
1
2

accounts
--------

custid    refdate     
------    -------     
1         2015-01-01  
2         2014-01-01 

第一个查询的结果将不包括customer 2,因为where子句会过滤掉它,因为有一个匹配的帐户,但是refdate不在所需的范围内。第二个查询将包括customer 2,但是refdatestatus将是null,因为匹配的帐户不满足join子句。

以下查询相当于您的第二个查询:

代码语言:javascript
复制
select a.custid, b.ref_date,b.status
from customertable a
left join accounts b
on a.custid = b.custid
  and '2015-01-01' <= b.ref_date <= '2016-01-01'

我不认为这两个查询在效率上会有显著差异,因为编译器提出的计划可能是相同的。

一般来说,唯一可以肯定地说,如果一个查询比另一个查询更有效率的话,那就是尝试这两种方法,并测量结果。即使这样,它也可能并不总是更高效,因为随着时间的推移,例如数据分散、索引的效率和其他因素的变化,可以使一个查询在给定的上下文中更高效。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37597808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档