2010-04-22 122 views
7

这两句话是逻辑上等同:BETWEEN运算符与> = AND AND <=:是否存在性能差异?

SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100 

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

是否有潜在的性能优势,以一比其他?

+1

我甚至不知道有一个运营商之间。这是第一次看到它,如果两者之间是包容性的或排他性的,它并不是100%清楚。我猜对了,但既然答案说没有性能差异,我会坚持使用第二个版本以使其更清晰。但是,我是那种在不需要别人读取我的代码时确保没有任何误解的情况下添加括号的人。 – drs9222 2010-04-22 16:30:02

回答

4

没有好处,只是一个语法糖。

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

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

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

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' 

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

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

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