52

(特に) mysql で次のクエリを実行すると、パフォーマンスが向上しますか?

SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300

以上:

SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300

または BETWEEN 構文が 2 番目の SQL に置き換えられているだけですか?

4

4 に答える 4

48

私が覚えているように、違いはありません。ただし、次の場合は自分で確認してください。

explain plan for 
SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300

と:

explain plan for
SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300

同じプランを作成します。

于 2010-12-07T23:53:25.527 に答える
31

ドキュメントから:

  • exprとのminmax

exprが以上で、min以下exprの場合、maxBETWEEN は 1 を返し、それ以外の場合は 0 を返します。これは、すべての引数が同じ型である場合の式 ( min<= exprAND expr<= ) と同等です。maxそれ以外の場合は、セクション11.2「式の評価における型変換」で説明されている規則に従って型変換が行われますが、3 つの引数すべてに適用されます。

したがって、これは単なるシンタックス シュガーにすぎません。

于 2010-12-07T23:51:53.950 に答える
9

BETWEENより明確な意図を示し、読みやすくなります (SQL が実行しようとしている何か)。

于 2010-12-07T23:51:22.883 に答える