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

时间:2010-04-22 16:19:20

标签: sql-server performance between

这两个陈述在逻辑上是等价的:

SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100

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

对于一个与另一个相比,是否存在潜在的性能优势?

5 个答案:

答案 0 :(得分: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

并检查执行计划,您应该注意到它是完全相同的

答案 2 :(得分:1)

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

答案 3 :(得分: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'

令我惊讶的是,两者的运行时间几乎相同。当我做一个EXPLAIN PLAN时,他们给出了相同的结果。具体来说,第一个查询对条形图进行了两次查找,一次用于&gt; = test,再次用于&lt; = test,就像第二次查询一样。

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

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

答案 4 :(得分:0)

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

在子句的另一侧时,有人看到过差异吗?

选择*从表someCol1和someCol2之间的WHERE @日期

SELECT * FROM表中someCol1> = @date和someCol2 <= @date