web-dev-qa-db-ja.com

mysqlの「BETWEEN」パフォーマンスとは何ですか。

以下の(特に)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で置き換えられていますか?

42
Daveel

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

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

同じ計画を作成します。

38
tpdi

ドキュメント から:

  • expr BETWEEN min AND max

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

ですから、それは本当に単なる構文上の砂糖です。

28

BETWEENは、より明確な意図を示し、読みやすくなっています(SQLが実行することを目的としています)。

10
alex

次の3つのステートメントは同じ結果になります。

  1. i BETWEEN x AND y
  2. x <= i AND i <= Y
  3. i >= x AND i <= Y

しかし、構成3では、mysqlは(インデックスに応じて)異なるインデックスを使用する可能性があります。順序が重要であり、EXPLAINクエリでテストして違いを確認する必要があります

2
Soufiane Ghzal