14

これら 2 つのステートメントは、論理的に同等です。

SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100

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

一方と他方に潜在的なパフォーマンス上の利点はありますか?

4

5 に答える 5

5

利点はありません。単なる構文糖衣です。

バージョンを使用するBETWEENことで、場合によっては機能の再評価を回避できます。

于 2010-04-22T16:21:57.193 に答える
2

うーん、これは意外な結果でした。ここには SQL Server がないので、Postgres で試しました。明らかに免責事項が適用されます。必ずしも同じ結果が得られるとは限りません。走行距離は異なる場合があります。使用する前に医師に相談してください。それでも ...

単純なクエリを 2 つの異なる方法で作成しました。

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 を実行すると、同じ結果が得られました。具体的には、最初のクエリは、2 番目のクエリと同様に、>= テストに対して 1 回、<= テストに対して 2 回、bar に対してルックアップを 2 回実行しました。

結論: 少なくとも Postgres では、BETWEEN は実際には単なるシンタックス シュガーです。

個人的には、特にテスト対象の値が式の場合は、読者にとってより明確であるため、定期的に使用しています。2 つの複雑な式が同一であることを理解することは、簡単ではありません。2 つの複雑な式が同一でなくても同一である必要があることを理解することは、さらに困難です。

于 2010-04-22T16:42:32.550 に答える
1

いいえ、パフォーマンス上の利点はありません。ほんの少しのキャンディーです。

クエリの比較をチェックする場合、次のようなものです

DECLARE @Table TABLE(
        ID INT
)

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

SELECT  *
FROM    @Table 
WHERE   ID BETWEEN 1 AND 100

実行計画を確認すると、まったく同じであることがわかります。

于 2010-04-22T16:21:45.460 に答える
1

パフォーマンス上の利点はありません。最初のものの読み取り/書き込みが簡単になるだけです。

于 2010-04-22T16:21:52.247 に答える