在(尤其是)MySQL 中查询以下内容时,是否有更好的性能:
SELECT * FROM `table` WHERE `unix_date` BETWEEN 1291736700 AND 1291737300
失败,超出限制,结束
SELECT * FROM `table` WHERE `unix_date` >= 1291736700 AND `unix_date` <= 1291737300
是否只是将"or BETWEEN"语法替换为第二个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节“表达式计算中的类型转换”所述的规则进行类型转换,但应用于所有三个参数。
因此它只是语法糖。
BETWEEN
更清晰地表达了意图,阅读起来也更加流畅(这是SQL旨在实现的目标)。
i BETWEEN x AND y
x <= i AND i <= Y
i >= x AND i <= Y