BETWEEN 运算符与 >= AND <=:有性能差异吗?

Posted

技术标签:

【中文标题】BETWEEN 运算符与 >= AND <=:有性能差异吗?【英文标题】:BETWEEN operator vs. >= AND <=: Is there a performance difference? 【发布时间】:2010-04-22 16:19:20 【问题描述】:

这两个语句在逻辑上是等价的:

SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100

SELECT * FROM table WHERE someColumn >= 1 AND someColumn <= 100

两者之间是否存在潜在的性能优势?

【问题讨论】:

我什至不知道有一个 between 运算符。第一次看它时,我并不确定 100% 之间是包容性还是排他性。我确实猜对了,但是因为答案说没有性能差异,所以我会坚持使用第二个版本以使其更清晰。但是,我是那种会在不需要的地方添加括号的人,只是为了确保在其他人阅读我的代码时没有任何误解。 这能回答你的问题吗? SQL : BETWEEN vs <= and >= 【参考方案1】:

没有好处,只是语法糖。

通过使用BETWEEN 版本,您可以在某些情况下避免函数重新评估。

【讨论】:

【参考方案2】:

嗯,这是一个令人惊讶的结果。我这里没有 SQL Server,所以我在 Postgres 中尝试了这个。显然免责声明适用:这不一定会给出相同的结果,您的里程可能会有所不同,请在使用前咨询医生。不过还是……

我只是用两种不同的方式写了一个简单的查询:

select *
from foo
where (select code from bar where bar.barid=foo.barid) between 'A' and 'B'

select *
from foo
where (select code from bar where bar.barid=foo.barid)>='A'
and (select code from bar where bar.barid=foo.barid)<='B'

令我惊讶的是,两者的运行时间几乎相同。当我做一个解释计划时,他们给出了相同的结果。具体来说,第一个查询对 bar 进行了两次查找,一次用于 >= 测试,另一次用于

结论:至少在 Postgres 中,BETWEEN 确实只是语法糖。

就我个人而言,我经常使用它,因为它对读者来说更清楚,特别是如果被测试的值是一个表达式。弄清楚两个复杂的表达式是相同的可能是一项不平凡的练习。找出两个复杂的表达式应该是相同的,即使它们不是相同的更加困难。

【讨论】:

【参考方案3】:

没有性能优势,只是更容易读/写第一个。

【讨论】:

【参考方案4】:

不,没有性能优势。它只是一个小糖果。

如果您要检查查询比较,例如

DECLARE @Table TABLE(
        ID INT
)

SELECT  *
FROM    @Table
WHERE   ID >= 1 AND ID <= 100

SELECT  *
FROM    @Table 
WHERE   ID BETWEEN 1 AND 100

并检查执行计划,你应该注意到它完全一样

【讨论】:

【参考方案5】:

哦,但是你们都指的是搜索值在where子句左侧的情况。

有没有人在子句的另一边看到了差异。

SELECT * FROM table WHERE @date BETWEEN someCol1 AND someCol2

SELECT * FROM table WHERE someCol1 >= @date AND someCol2

【讨论】:

以上是关于BETWEEN 运算符与 >= AND <=:有性能差异吗?的主要内容,如果未能解决你的问题,请参考以下文章

类型与运算

链表中LinkList L与LinkList *L 借鉴

Python赋值运算符与非赋值不同

java.运算符

>> 双精度数组的运算符?

生成一个mysql BETWEEN子句以在日期范围内查找