Sql server 操作员与>=和=测试,另一次是针对

Sql server 操作员与>=和=测试,另一次是针对,sql-server,performance,between,Sql Server,Performance,Between,这两种说法在逻辑上是等价的: SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100 SELECT * FROM table WHERE someColumn >= 1 AND someColumn <= 100 两者之间是否存在潜在的性能优势?不,没有性能优势。只是一点糖果 如果要检查查询比较,请执行以下操作 DECLARE @Table TABLE( ID INT ) SELECT * FROM

这两种说法在逻辑上是等价的:

SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100

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

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

不,没有性能优势。只是一点糖果

如果要检查查询比较,请执行以下操作

DECLARE @Table TABLE(
        ID INT
)

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

SELECT  *
FROM    @Table 
WHERE   ID BETWEEN 1 AND 100

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

没有性能方面的好处,只是第一个计划更容易读/写。

没有好处,只是语法方面的问题


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

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

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

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


令我惊讶的是,两者的运行时间几乎相同。当我做一个解释计划时,他们给出了相同的结果。具体来说,第一个查询对bar进行了两次查找,一次是针对>=测试,另一次是针对Oh,但您都提到了搜索值位于where子句左侧的情况

在条款的另一边,有人看了差异吗

从表格中选择*,其中@date介于someCol1和someCol2之间


从表中选择*,其中someCol1>=@date和someCol2我甚至不知道有一个between运算符。第一次看它时,我并不100%清楚这两者之间是包容还是排斥。我的猜测是对的,但因为答案说没有性能差异,所以我会坚持使用第二个版本,以使其更清晰。然而,我是那种在不需要括号的地方添加括号的人,只是为了确保别人阅读我的代码时没有任何误解。
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'