質問
以下の(特に)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
の間にmin
とmax
もしも
expr
以上大きいか等しいmin
とexpr
以下ですmax
, 、返品1の間に、それ以外の場合は0を返します。 これは式に相当します(min
<=expr
とexpr
<=max
)すべての引数が同じタイプの場合。 それ以外の場合、タイプ変換は、セクション11.2「式評価のタイプ変換」で説明されているルールに従って行われますが、3つの引数すべてに適用されます。
それで、それは本当に単なる構文砂糖です。
BETWEEN
より明確な意図を示し、よりよく読みます(SQLがやろうとしています)。
次の3つのステートメントは同じ結果を生成します。
i BETWEEN x AND y
x <= i AND i <= Y
i >= x AND i <= Y
ただし、構成3では(インデックスに応じて)MySQLが異なるインデックスを使用する可能性があります。注文問題を説明する必要があります。
所属していません StackOverflow