質問

以下の(特に)mysqlでクエリをするとき、より良いパフォーマンスはありますか:

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

以上:

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

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

役に立ちましたか?

解決

私が思い出すように、違いはありません。しかし、次の場合は自分で確認してください

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

同じ計画を作成します。

他のヒント

から ドキュメント:

  • expr の間に minmax

もしも expr 以上大きいか等しい minexpr 以下です max, 、返品1の間に、それ以外の場合は0を返します。 これは式に相当します(min <= exprexpr <= max)すべての引数が同じタイプの場合。 それ以外の場合、タイプ変換は、セクション11.2「式評価のタイプ変換」で説明されているルールに従って行われますが、3つの引数すべてに適用されます。

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

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

次の3つのステートメントは同じ結果を生成します。

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

ただし、構成3では(インデックスに応じて)MySQLが異なるインデックスを使用する可能性があります。注文問題を説明する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top