以下の(特に)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で置き換えられていますか?
私が覚えているように、違いはありません。ただし、次の場合は自分で確認してください。
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
BETWEENmin
ANDmax
expr
がmin
以上で、expr
がmax
以下の場合、BETWEENは1を返し、それ以外の場合は0を返します。 これは、すべての引数が同じ型である場合、式(min
<=expr
ANDexpr
<=max
)と同等です。 それ以外の場合、型変換は、セクション11.2「式評価での型変換」で説明されているルールに従って行われますが、3つの引数すべてに適用されます。
ですから、それは本当に単なる構文上の砂糖です。
BETWEEN
は、より明確な意図を示し、読みやすくなっています(SQLが実行することを目的としています)。
次の3つのステートメントは同じ結果になります。
i BETWEEN x AND y
x <= i AND i <= Y
i >= x AND i <= Y
しかし、構成3では、mysqlは(インデックスに応じて)異なるインデックスを使用する可能性があります。順序が重要であり、EXPLAINクエリでテストして違いを確認する必要があります