[BETWEEN运算符vs。> = AND <=:是否存在性能差异?

问题描述 投票:12回答:5

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

SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100

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

一个相对于另一个具有潜在的性能优势吗?

sql-server performance between
5个回答
5
投票

没有好处,只是语法糖。

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


1
投票

没有性能上的好处,读/写第一个更容易。


1
投票

不,没有表现。它只是一点糖果。

如果要检查查询比较,则类似

DECLARE @Table TABLE(
        ID INT
)

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

SELECT  *
FROM    @Table 
WHERE   ID BETWEEN 1 AND 100

并检查执行计划,您应注意完全相同


1
投票

嗯,这是一个令人惊讶的结果。我这里没有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确实只是语法糖。

我个人定期使用它,因为它对读者来说更清楚,特别是如果要测试的值是一个表达式。弄清楚两个复杂的表达式是相同的,这并非易事。弄清楚两个复杂的表达式即使不相同也应该相同,这更加困难。


0
投票

哦,但是大家都提到当搜索值在where子句的左侧时的情况。

© www.soinside.com 2019 - 2024. All rights reserved.